复制数据集内容

可以创建一 DataSet 个副本,以便在不影响原始数据的情况下处理数据,或者使用 数据集中的数据子集。 复制 数据集时,可以:

  • 创建 数据集的确切副本,包括架构、数据、行状态信息和行版本。

  • 创建一个数据集,其中包含现有数据集的架构,但仅包含已修改的行。 可以返回已修改的所有行,或指定特定的 DataRowState。 有关行状态的详细信息,请参阅 行状态和行版本

  • 仅复制 数据集 的架构或关系结构,而不复制任何行。 使用 DataTable 可以将行导入到现有的 ImportRow 中。

若要创建包含架构和数据的 DataSet 的确切副本,请使用 CopyDataSet 的方法。 下面的代码示例演示如何创建 数据集的确切副本。

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

要创建数据集的一个副本,该副本包含架构且仅包含表示已添加已修改已删除行的数据,请使用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 的副本,请使用 CloneDataSet 的方法。 还可以使用 DataTableImportRow 方法将现有行添加到克隆的数据集ImportRow 向指定的表添加数据、行状态和行版本信息。 仅当列名匹配且数据类型兼容时,才会添加列值。

下面的代码示例创建 DataSet 的克隆,然后将原始 DataSet 中的行添加到 DataSet 克隆中的 Customers 表中,其中 CountryRegion 列具有值“Germany”的客户。

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);  

另请参阅