为了在不影响初始数据的情况下使用数据,或者使用 DataSet 中数据的子集,可以创建 DataSet 的副本。当复制 DataSet 时,可以:
若要创建包含架构和数据的 DataSet 原样副本,请使用 DataSet 的 Copy 方法。以下代码示例显示如何创建 DataSet 的原样副本。
[Visual Basic]
Dim copyDS As DataSet = custDS.Copy()
[C#]
DataSet copyDS = custDS.Copy();
若要创建包含架构并仅包含表示 Added、Modified 或 Deleted 行的数据的 DataSet 副本,请使用 DataSet 的 GetChanges 方法。当调用 GetChanges 时,也可以通过传递 DataRowState 值来使用 GetChanges 仅返回具有指定行状态的行。以下代码示例显示如何在调用 GetChanges 时传递 DataRowState。
[Visual Basic]
' 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 副本,请使用 DataSet 的 Clone 方法。也可以使用 DataTable 的 ImportRow 方法将现有行添加到克隆的 DataSet 中。ImportRow 将数据、行状态和行版本信息添加到指定表中。只有当列名称匹配且数据类型兼容时,才会添加列值。
以下代码示例创建 DataSet 的复本,然后为 Country 列的值为“Germany”的客户将初始 DataSet 中的行添加到 DataSet 复本中的 Customers 表。
[Visual Basic]
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);