3

VS2005/VS2008 DataSet デザイナーで作成された、厳密に型指定された DataTable があります。

テーブルには、SQL サーバーによって入力される GUID である主キー列があります。問題は、DataTable に行 (または複数の行) を追加してから、DataAdapter.Updateメソッドを呼び出す (DataTable を渡す) 場合です。DataAdapter.Updateが呼び出されると、主キー列に NULL を挿入できないという SQL 例外が発生します。

これが自動生成された列であり、新しい行に値を提供したくないことをデザイナーに伝えるにはどうすればよいですか? SQLによって生成された値が欲しいだけです。

ここに何か欠けているのでしょうか、それとも DataSet デザイナーの制限ですか?

LINQ to SQL を使用してこれを達成する方法は知っていますが、残念ながら、このプロジェクトでは自由に使用できません。

4

2 に答える 2

2

おそらくこれらの1つ:

  • アプリのDataSetに列が必要ない場合は、削除します。
  • 列が必要であるが値を指定する必要がない場合は、DBNullを許可するように列を変更します。
  • 制約の強制はいつでもオフにできます(おそらく悪い考えです):DataSet.EnforceConstraints = false
  • DBに送信されない代理キーを列に入力することができます。

最初の2つのオプションでは、設計者が構造をデータベースと同期できるようにする便利な方法が必要な場合は、列を削除するか、プログラムでnullを許可することができます。おそらく、理由を説明する「// HACK:」コメントのすぐ横にあります。

于 2009-05-02T18:19:36.763 に答える
0

おそらく、SQL Server テーブル定義で DEFAULT NEWID() を使用しているため、データセット デザイナーがこの列を自動生成されたものとして認識していない可能性があります。

アプリケーション コードで GUID を生成することが解決策になるのではないでしょうか? そうでない場合は、データセットにデフォルト値を設定できますが、おそらく DataAdapter Insert/Update ステートメントも変更して、このデフォルト値が SQL Server テーブルに挿入されないようにする必要があります。

私が気付いていない他の解決策があるかもしれません...

于 2009-04-30T14:25:10.510 に答える