データセットを介してデータ ソースを更新するには、2 段階のプロセスがあります。第 1 段階のプロセスは、新しい情報 (新しいレコード、変更されたレコード、または削除されたレコード) によるデータセットの更新です。アプリケーションがデータセットだけを扱う (たとえば、更新したデータセットは次の処理のために別のアプリケーションに送信される) 場合は、第 1 段階で更新処理を完了します。
メモ : |
|---|
Windows フォームでは、データ バインディング アーキテクチャが、データ バインド コントロールからデータセットへの変更の送信を処理します。独自のコードでデータセットを明示的に更新する必要はありません。詳細については、「Windows フォームでのデータ バインディング」を参照してください。 |
データ ソース (データベースなど) を更新する場合は、第 2 段階のプロセスでデータセットの変更内容を元のデータ ソースに送ります。第 1 段階のデータセット更新プロセスでは基になるデータ ソースに変更内容が書き込まれないので、第 2 段階の更新プロセスを明示的に実行する必要があります。データ ソース更新プロセスを明示的に実行するには、通常、データセットにレコードを読み込むのに使用したのと同じ TableAdapter (またはデータ アダプタ) の Update メソッドを呼び出します。ただし、別のアダプタを使用して 1 つのデータ ソースから別のデータ ソースにデータを移動したり、複数のデータ ソースを更新したりすることもできます。
2 段階の更新プロセスと、正常な更新における DataRowVersion の役割
.gif)
構造的にデータセットではデータをコレクションの集合として利用できます。データセットにはテーブルのコレクションが含まれます。テーブルには行のコレクションが含まれます。テーブルは DataSet オブジェクトのコレクションとして公開され、レコードは DataTable オブジェクトの Rows コレクションで利用できます。基本コレクション メソッドを使って単にコレクションを操作するだけでデータセットのデータを変更できますが、基になるデータ ソースを更新する場合は、データセットの変更専用にデザインされたメソッドを使う必要があります。
たとえば、データ テーブルからレコードを削除するのにテーブルの Rows コレクションの RemoveAt メソッドを呼び出すと、レコードはデータセットから物理的に削除されます。データセットをデータの構造化ストアとしてだけ使用し、変更情報を別のアプリケーションに転送する予定がない場合は、この方法でコレクションを操作してデータセットを更新しても問題ありません。
ただし、変更内容をデータ ソースまたは別のアプリケーションに送信する場合は、それぞれの更新に関して変更情報 (メタデータ) を保持しておく必要があります。後で変更内容をデータ ソースまたはアプリケーションに送信するときに、適切なレコードを探して更新するのに必要な情報をプロセスに与えるためです。たとえば、データセット内のレコードを削除する場合、削除したレコードに関する情報をデータセット内に保持しておく必要があります。このようにすると、TableAdapter の DeleteCommand が呼び出されたとき、データ ソースの元のレコードを特定する十分な履歴情報があるので、そのレコードを削除できます。詳細については、後の「変更に関する情報の保持」を参照してください。