次の方法で共有


DataSet の内容のコピー

DataSet のコピーを作成すると、元のデータに影響せずにデータを使用したり、DataSet のデータのサブセットを使用したりできます。DataSet をコピーすると、次の操作を行うことができます。

  • スキーマ、データ、行状態情報、行バージョンなどの DataSet の正確なコピーを作成できます。
  • 既存の DataSet のスキーマを含み、行だけを変更した DataSet を作成できます。すべての行を変更したり、特定の DataRowState を指定したりできます。行状態の詳細については、「行の状態とバージョン」を参照してください。
  • 行をコピーせずに、DataSet のスキーマ (リレーショナル構造体) だけをコピーできます。ImportRow を使用して、行を既存の DataTable にインポートできます。

スキーマとデータを含む DataSet の正確なコピーを作成するには、DataSetCopy メソッドを使用します。DataSet の正確なコピーを作成する方法を次のコード例に示します。

Dim copyDS As DataSet = custDS.Copy()
[C#]
DataSet copyDS = custDS.Copy();

スキーマ、およびデータが AddedModified、または Deleted である行だけを含む DataSet のコピーを作成するには、DataSetGetChanges メソッドを使用します。また、GetChanges を使用して GetChanges の呼び出し時に DataRowState の値を渡すことによって、特定の行状態の行だけを返すことができます。GetChanges の呼び出し時に DataRowState を渡す方法を次のコード例に示します。

' Copy all changes.
Dim changeDS As DataSet = custDS.GetChanges()
' Copy only new rows.
Dim addedDS As DataSet = custDS.GetChanges(DataRowState.Added)
[C#]
// Copy all changes.
DataSet changeDS = custDS.GetChanges();
// Copy only new rows.
DataSet addedDS = custDS.GetChanges(DataRowState.Added);

スキーマだけを含む DataSet のコピーを作成するには、DataSetClone メソッドを使用します。また、DataTableImportRow メソッドを使用して、既存の行をクローンで作成された DataSet に追加することもできます。ImportRow メソッドを使用すると、データ、行の状態、および行バージョンの情報が指定したテーブルに追加されます。列名が一致し、データ型が互換性のある型の場合には、列の値だけが追加されます。

DataSet のクローンを作成し、Country 列の値が "Germany" の顧客に対する DataSet クローンの Customers テーブルに元の DataSet の行を追加するコード例を次に示します。

Dim custGermanyDS As DataSet = custDS.Clone()

Dim copyRows() As DataRow = custDS.Tables("Customers").Select("Country = 'Germany'")

Dim custTable As DataTable = custGermanyDS.Tables("Customers")
Dim copyRow As DataRow

For Each copyRow In copyRows
  custTable.ImportRow(copyRow)
Next
[C#]
DataSet custGermanyDS = custDS.Clone();

DataRow[] copyRows = custDS.Tables["Customers"].Select("Country = 'Germany'");

DataTable custTable = custGermanyDS.Tables["Customers"];

foreach (DataRow copyRow in copyRows)
  custTable.ImportRow(copyRow);

参照

DataSet の作成および使用 | DataSet クラス | DataTable クラス