|
2008/09/11(Thu) 11:26:18 編集(投稿者)
■No24846 (気合 さん) に返信 >>> 一意制約違反となります。 >>TableAdapter の SelectCommand, InsertCommand, UpdateCommand, DeleteCommand の SQL が、 >>どのように設定されているか、また、パラメータの型が適切であるかどうかを確認してみてください。 > その確認ですが、updateメソッドに対してそのコマンドの設定って関係ありますか?
実際に関係あるかどうかは、気合さん自身に確認していただかないと分かりません。 あくまでも関係する可能性がある、というだけです。(だからこそ、逆質問しているわけで(^^;)
たとえば…Parameters で日付型と日付時刻型とを間違えて設定されていた場合、データの 時刻部が切り捨てられるため、該当データを正しく検出できず、更新が失敗する事があります。
あるいは、同時実行制御(optimistic / pessimistic)の扱いも重要です。 DELETE/UPDATE の WHERE 句の組み方によって、同時実行制御性が決まりますが、 この条件の組み方次第では、やはり更新に失敗する可能性がありえます。
なのでまずは、自動生成(あるいは手動変更)された更新クエリの確認と、Parameters 設定の 見極めが必要であろうということから、先の逆質問となった次第です。
あと、オートナンバー列の場合は、AutoIncrement の設定漏れにも注意が必要かも。
=== 以下追記 ===
TableAdapter で Update 系メソッドというと、以下の 3 種があるかと思いますが、 今回使っているのは、(1) のメソッドという事でよろしいですか?
(1) DataTable への編集結果を反映させるためのメソッド。 tableAdapter.Update( [dataSet または DataTable] ) tableAdapter.Update( [dataSet または DataTable], 引数1, 引数2, … )
(2) TableAdapter に追加登録したクエリにて更新させるメソッド。以下のような形式。 tableAdapter.UpdateQuery1( ) tableAdapter.UpdateQuery2( 引数1, 引数2, … )
(3) TableAdapter の GenerateDBDirectMethods プロパティによって自動生成されるメソッド。 tableAdapter.Update( [DataRow または DataRow配列] ) tableAdapter.Update( 列値1, 列値2, … )
--
(1)は、TableAdapter の InsertCommand, UpdateCommand, DeleteCommand プロパティの SQL にて処理されるメソッドです。 これらは、DataSet/DataTable への編集結果を DB に反映させるために使われます。
(2) は、TableAdapter への追加クエリとして、CommandText に指定された UPDATE SQLまたはストアドにて処理されるものです。 これらは、DataSet/DataTable を介さずに、直接更新するためのメソッドです。
(3) は、(1) で生成されたメソッドのオーバーロードとして自動生成されるもので、 DataSet/DataTable を介さずに、行単位での更新を可能にするメソッドです。
|