Udostępnij przez


Kopiowanie zawartości zestawu danych

Możesz utworzyć kopię elementu DataSet , aby można było pracować z danymi bez wpływu na oryginalne dane lub pracować z podzbiorem danych z zestawu danych. Podczas kopiowania zestawu danych można wykonywać następujące czynności:

  • Utwórz dokładną kopię zestawu danych, w tym schemat, dane, informacje o stanie wiersza i wersje wierszy.

  • Utwórz obiekt DataSet zawierający schemat istniejącego zestawu danych, ale tylko wiersze, które zostały zmodyfikowane. Możesz zwrócić wszystkie wiersze, które zostały zmodyfikowane, lub określić konkretną wartość DataRowState. Aby uzyskać więcej informacji na temat stanów wierszy, zobacz Stany wierszy i Wersje wierszy.

  • Skopiuj schemat, czyli relacyjną strukturę DataSet bez kopiowania wierszy. Wiersze można zaimportować do istniejącego DataTable przy użyciu polecenia ImportRow.

Aby utworzyć dokładną kopię elementu DataSet zawierającego zarówno schemat, jak i dane, użyj Copy metody zestawu danych. Poniższy przykład kodu pokazuje, jak utworzyć dokładną kopię zestawu danych.

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

Aby utworzyć kopię elementu DataSet zawierającego schemat i tylko dane reprezentujące dodane, zmodyfikowane lub Deleted wiersze, użyj GetChanges metody zestawu danych. Można również użyć GetChanges, by zwracać tylko wiersze o określonym stanie wiersza, przekazując zmienną DataRowState podczas wywoływania metody GetChanges. W poniższym przykładzie kodu pokazano, jak przekazać element DataRowState podczas wywoływania metody 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);

Aby utworzyć kopię elementu DataSet zawierającego tylko schemat, użyj Clone metody Zestawu danych. Możesz również dodać istniejące wiersze do sklonowanego DataSet używając metody ImportRow dla DataTable. ImportRow Dodaje dane, stan wiersza i informacje o wersji wiersza do określonej tabeli. Wartości kolumn są dodawane tylko wtedy, gdy nazwa kolumny jest zgodna, a typ danych jest zgodny.

Poniższy przykład kodu tworzy klon elementu DataSet, a następnie wiersze z oryginalnego DataSet zostają dodane do tabeli Customers w klonie DataSet dla klientów, których kolumna CountryRegion ma wartość "Niemcy".

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

Zobacz także