Поделиться через


Копирование содержимого набора данных

Вы можете создать копию DataSet , чтобы работать с данными, не влияя на исходные данные, или работать с подмножеством данных из набора данных. При копировании набора данных можно:

  • Создайте точную копию набора данных, включая схему, данные, сведения о состоянии строки и версии строк.

  • Создайте набор данных, содержащий схему существующего набора данных, но только измененные строки. Можно вернуть все измененные строки или указать определенный DataRowState. Дополнительные сведения о состояниях строк см. в разделе "Состояния строк" и "Версии строк".

  • Скопируйте схему или реляционную структуру только набора данных без копирования строк. Строки могут быть импортированы в существующий объект DataTable с использованием ImportRow.

Чтобы создать точную копию набора данных, включающую схему и данные, используйте Copy метод DataSet. В следующем примере кода показано, как создать точную копию набора данных.

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

Чтобы создать копию набора данных, включающего схему, и только данные, представляющие строки Added, Modified или Deleted, используйте GetChanges метод Набора данных. Вы также можете использовать GetChanges для возврата только строк с указанным состоянием строки, передав значение DataRowState при вызове GetChanges. В следующем примере кода показано, как передать DataRowState при вызове GetChanges.

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

Чтобы создать копию набора данных, включающую только схему, используйте Clone метод Набора данных. Вы также можете добавить существующие строки в клонируемый набор данных с помощью метода ImportRow dataTable. ImportRow добавляет данные, состояние строки и сведения о версии строки в указанную таблицу. Значения столбца добавляются только в тех случаях, если имена столбцов согласуются, а типы данных являются совместимыми.

Следующий пример кода создает клон набора данных, а затем добавляет строки из исходного набора данных в таблицу Customers в клоне DataSet для клиентов, где столбец CountryRegion имеет значение "Германия".

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

См. также