可以创建一 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 的方法。 还可以使用 DataTable 的 ImportRow 方法将现有行添加到克隆的数据集。 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);