私のアプリケーションには、データベース テーブルの内容をユーザーに表示するコントロールがあります。このコントロールは、System.Data.DataSet
オブジェクトに表示するデータを保持します。ユーザーは、コントロールに表示されたデータを変更できます。ユーザーの操作が完了すると、このデータはデータベースにコミットされます。
ユーザーがコントロールで編集を行っているときに、データベース テーブルのデータが外部プロセスによって変更されると (たとえば、いくつかの行が更新されるなど)、問題が発生します。ここでは、データの正確性の問題を無視して、ユーザーがコントロールで行った変更をコミットし、この外部プロセスによって行われた変更を上書きします。
を使用しSqlDataAdapter
てデータベースを更新しています。説明されている使用例では、基になるデータベース テーブルが外部プロセスによって変更されていない場合、SqlDataAdapter.Update
期待どおりに動作します。ただし、ユーザーがテーブルを編集しているときに外部プロセスがテーブルをいじったシナリオではSqlDataAdapter.Update
、例外はスローされず、行が更新されなかったことを示す 0 が返されます。データセットの行に正しいデータが含まれていることを確認したのでRowState
(つまりDataRowState.Modified
)、メソッドに渡すデータが正しいことがわかりSqlDataAdapter.Update
ます。
私の質問には2つの部分があると思います。
SqlDataAdapter.Update
指定されたデータセットでデータベースを更新しないのはなぜですか?- なぜ静かに失敗するのですか?
このブログ エントリを読みましたが、私のコードはAcceptChanges
どこにも呼び出されません。上で述べたように、 をチェックしたので、行が変更されたデータとして正しくマークされていることがわかりましたDataSet
。RowState