DataSet の内容のコピー (ADO.NET)
DataSet のコピーを作成すると、元のデータに影響せずにデータを使用したり、DataSet のデータのサブセットを使用したりできます。 DataSet をコピーすると、次の操作を行うことができます。
スキーマ、データ、行状態情報、行バージョンなどの DataSet の正確なコピーを作成できます。
既存の DataSet のスキーマを含み、行だけを変更した DataSet を作成できます。 変更されたすべての行を返したり、特定の DataRowState を指定したりできます。 行の状態の詳細については、「行の状態とバージョン」を参照してください。
行をコピーせずに、DataSet のスキーマ (リレーショナル構造) だけをコピーできます。 ImportRow を使用して、行を既存の DataTable にインポートできます。
スキーマとデータを含む DataSet の正確なコピーを作成するには、DataSet の Copy メソッドを使用します。 DataSet の正確なコピーを作成する方法を次のコード サンプルに示します。
Dim copyDataSet As DataSet = customerDataSet.Copy()
DataSet copyDataSet = customerDataSet.Copy();
スキーマ、およびデータが Added、Modified、または Deleted である行だけを含む DataSet のコピーを作成するには、DataSet の GetChanges メソッドを使用します。 また、GetChanges の呼び出し時に DataRowState の値を渡すことによって、GetChanges を使用して特定の行状態の行だけを返すことができます。 GetChanges の呼び出し時に DataRowState を渡す方法を次のコード サンプルに示します。
' Copy all changes.
Dim changeDataSet As DataSet = customerDataSet.GetChanges()
' Copy only new rows.
Dim addedDataSetAs DataSet = _
customerDataSet.GetChanges(DataRowState.Added)
// Copy all changes.
DataSet changeDataSet = customerDataSet.GetChanges();
// Copy only new rows.
DataSet addedDataSet= customerDataSet.GetChanges(DataRowState.Added);
スキーマだけを含む DataSet のコピーを作成するには、DataSet の Clone メソッドを使用します。 また、DataTable の ImportRow メソッドを使用して、複製した DataSet に既存の行を追加することもできます。 ImportRow メソッドを使用すると、データ、行の状態、および行バージョンの情報が指定したテーブルに追加されます。 列名が一致し、データ型が互換性のある型の場合には、列の値だけが追加されます。
DataSet のクローンを作成し、CountryRegion 列の値が "Germany" の顧客に対する DataSet のクローン内の Customers テーブルに、元の DataSet の行を追加するコード サンプルを次に示します。
Dim germanyCustomers As DataSet = customerDataSet.Clone()
Dim copyRows() As DataRow = _
customerDataSet.Tables("Customers").Select("CountryRegion = 'Germany'")
Dim customerTable As DataTable = germanyCustomers.Tables("Customers")
Dim copyRow As DataRow
For Each copyRow In copyRows
customerTable.ImportRow(copyRow)
Next
DataSet germanyCustomers = customerDataSet.Clone();
DataRow[] copyRows =
customerDataSet.Tables["Customers"].Select("CountryRegion = 'Germany'");
DataTable customerTable = germanyCustomers.Tables["Customers"];
foreach (DataRow copyRow in copyRows)
customerTable.ImportRow(copyRow);