复制数据集内容 (ADO.NET)

更新:November 2007

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

  • 创建 DataSet 的原样副本,其中包含架构、数据、行状态信息和行版本。

  • 创建包含现有 DataSet 的架构但仅包含已修改行的 DataSet。 可以返回已修改的所有行或者指定特定的 DataRowState。 有关行状态的更多信息,请参见行状态与行版本

  • 仅复制 DataSet 的架构(即关系结构),而不复制任何行。 可以使用 ImportRow 将行导入现有 DataTable

若要创建包含架构和数据的 DataSet 的原样副本,请使用 DataSetCopy 方法。 以下代码示例显示如何创建 DataSet 的原样副本。

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

若要创建包含架构并仅包含表示 AddedModifiedDeleted 行的数据的 DataSet 副本,请使用 DataSetGetChanges 方法。 当调用 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 副本,请使用 DataSetClone 方法。 您也可以使用 DataTableImportRow 方法将现有行添加到克隆的 DataSet 中。ImportRow 将数据、行状态和行版本信息添加到指定表中。 只有当列名称匹配且数据类型兼容时,才会添加列值。

以下代码示例创建 DataSet 的复本,然后为 CountryRegion 列的值为“Germany”的客户将原始 DataSet 中的行添加到 DataSet 复本中的 Customers 表。

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

请参见

参考

DataSet

DataTable

其他资源

DataSet、DataTable 和 DataView (ADO.NET)