DataSet
//アーキテクチャを使用してDataTable
、DataAdapter
データベースとモデル オブジェクトの間を仲介しています。これらは独自のバッキングを持っています (DataRow によってバッキングされていません)。、、および がありDataAdapter
ます。これらの条件下でのモデルの私の理解は次のとおりです。AcceptChangesDuringFill = False
AcceptChangesDuringUpdate = False
FillLoadOption = OverwriteChanges
DataAdapter
DataAdapter.Update()
DataRowState.Added
InsertCommand
発砲につながりますDataRowState.Modified
UpdateCommand
発砲につながりますDataRowState.Deleted
DeleteCommand
発砲につながります
DataAdapter.Fill()
- 主キーが の既存の行に対応する返された結果セットの行は、その行の更新に使用され、返された行が現在の行と同一であっても、
DataTable
その行の状態は常に になります。DataRowState.Modified
- 主キーが既存の行に対応しない、返された結果セット内の行は、新しい行の作成に使用され、その行の状態は次のようになります。
DataRowState.Added
DataTable
返された結果セットの行に対応しない行はそのまま残ります。DataRowState.Unchanged
このメンタル モデルで私が正しいとすればFill()
、データ ソース内の削除された行を通知するために を使用するとします。また、 のパラメータがSelectCommand
テーブル全体を返さないとします。次の 2 つのオプションがあると思います。
Fill()
によって更新されるべきであるが、まだ更新されているすべての行を見つけますDataRowState.Unchanged
(上記のテストされていないイタリック体の仮定に依存しています)。これらの行はデータ ソースで削除されています。- ;の
DataTable
前の関連行をすべてクリアします。Fill()
再び表示されない行は、データ ソースで削除されています。これにより、最初の方法で保持されている とDataRowState.Added
の区別が失われます。DataRowState.Modified
だから、私の質問:
- 上記のモデルは、
DataAdapter
上部に記載したプロパティ値の対象となりますか? - 削除された行を見つけるには、どのオプションを使用すればよいですか? 私は最初のものを好みますが、それは
DataRowState.Modified
、行が同一であっても、返されるすべての行がに設定されるという私の仮定に依存しています。それは安全な仮定ですか? - 私はこれについてすべて間違っていますか?