DataSet//アーキテクチャを使用してDataTable、DataAdapterデータベースとモデル オブジェクトの間を仲介しています。これらは独自のバッキングを持っています (DataRow によってバッキングされていません)。、、および がありDataAdapterます。これらの条件下でのモデルの私の理解は次のとおりです。AcceptChangesDuringFill = FalseAcceptChangesDuringUpdate = FalseFillLoadOption = OverwriteChangesDataAdapter
DataAdapter.Update()
DataRowState.AddedInsertCommand発砲につながりますDataRowState.ModifiedUpdateCommand発砲につながりますDataRowState.DeletedDeleteCommand発砲につながります
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、行が同一であっても、返されるすべての行がに設定されるという私の仮定に依存しています。それは安全な仮定ですか? - 私はこれについてすべて間違っていますか?