次の方法で共有


DataSet コンテンツのコピー

元のデータに影響を与えずにデータを操作したりDataSet のデータのサブセットを操作したりできるように、のコピーを作成できます。 DataSet をコピーする場合は、次のことができます。

  • スキーマ、データ、行状態情報、行バージョンなど、 DataSet の正確なコピーを作成します。

  • 既存の DataSet のスキーマを含み、変更された行のみを含む DataSet を作成します。 変更されたすべての行を返すか、特定の DataRowState を指定できます。 行の状態の詳細については、「 行の状態と行のバージョン」を参照してください。

  • 行をコピーせずに、 DataSet のスキーマ (リレーショナル構造) のみをコピーします。 DataTableを使用して、既存のImportRowに行をインポートできます。

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

Dim copyDataSet As DataSet = customerDataSet.Copy()  
DataSet copyDataSet = customerDataSet.Copy();  

スキーマと、追加変更、または削除された行を表すデータのみを含む DataSet のコピーを作成するには、GetChanges メソッドを使用します。 GetChanges を使用して、GetChangesを呼び出すときに DataRowState 値を渡すことで、指定された行状態の行のみを返すこともできます。 次のコード例は、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 のコピーを作成するには、Clone メソッドを使用します。 DataTable の ImportRow メソッドを使用して、複製された DataSet に既存の行を追加することもできます。 ImportRow は 、データ、行の状態、および行のバージョン情報を指定されたテーブルに追加します。 列の値は、列名が一致し、データ型に互換性がある場合にのみ追加されます。

次のコード例では、DataSet の複製を作成し、CountryRegion 列の値が "Germany" である顧客の DataSet 複製の Customers テーブルに、元の DataSet の行を追加します。

Dim customerDataSet As New DataSet  
        customerDataSet.Tables.Add(New DataTable("Customers"))  
        customerDataSet.Tables("Customers").Columns.Add("Name", GetType(String))  
        customerDataSet.Tables("Customers").Columns.Add("CountryRegion", GetType(String))  
        customerDataSet.Tables("Customers").Rows.Add("Juan", "Spain")  
        customerDataSet.Tables("Customers").Rows.Add("Johann", "Germany")  
        customerDataSet.Tables("Customers").Rows.Add("John", "UK")  
  
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 customerDataSet = new DataSet();  
customerDataSet.Tables.Add(new DataTable("Customers"));  
customerDataSet.Tables["Customers"].Columns.Add("Name", typeof(string));  
customerDataSet.Tables["Customers"].Columns.Add("CountryRegion", typeof(string));  
customerDataSet.Tables["Customers"].Rows.Add("Juan", "Spain");  
customerDataSet.Tables["Customers"].Rows.Add("Johann", "Germany");  
customerDataSet.Tables["Customers"].Rows.Add("John", "UK");  
  
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);  

こちらも参照ください