共用方式為


複製資料集內容

您可以建立 DataSet 的複本,這樣就可以在不影響原始資料的情況下使用資料,也可以從 DataSet 使用資料的子集。 複製 DataSet 時,您可以:

  • 建立與 DataSet 完全相同的複本,包括結構描述、資料、資料列狀態資訊和資料列版本。

  • 建立一個 DataSet,其中包含現有 DataSet 的結構描述,但只有修改過的資料列。 您可以傳回所有修改過的資料列,或指定特定的 DataRowState。 如需資料列狀態的詳細資訊,請參閱資料 資料列狀態與資料列版本

  • 只複製 DataSet 的結構描述或關聯式結構,而不複製任何資料列。 使用 DataTable,可以將資料列匯入現有的 ImportRow

若要建立包含結構描述和資料的 DataSet 完整複本,請使用 DataSetCopy 方法。 下列程式碼範例顯示如何建立 DataSet 的完整複本。

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

若要建立 DataSet 的複本,其中包含結構描述和只表示 AddedModifiedDeleted 資料列的資料,請使用 DataSetGetChanges 方法。 呼叫 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 複本,請使用 DataSetClone 方法。 您也可以使用 DataTableImportRow 方法,將現有資料列加入複製的 DataSetImportRow 會將資料、資料列狀態和資料列版本資訊加入至指定資料表。 資料行值只會被加入資料行名稱相符且資料型別相容之處。

下列程式碼範例建立 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);  

另請參閱