Kopiowanie zawartości elementu DataSet

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 zestaw danych 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 lub relacyjną strukturę tylko zestawu danych bez kopiowania żadnych wierszy. Wiersze można zaimportować do istniejącego DataTable przy użyciu polecenia ImportRow.

Aby utworzyć dokładną kopię zestawu danych , która zawiera 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ę zestawu danych zawierającego schemat i tylko dane reprezentujące wiersze Dodane, Zmodyfikowane lub Usunięte, użyj GetChanges metody zestawu danych. Można również użyć metody GetChanges , aby zwrócić tylko wiersze o określonym stanie wiersza, przekazując wartość 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ę zestawu danych zawierającego tylko schemat, użyj Clone metody zestawu danych. Możesz również dodać istniejące wiersze do sklonowanego zestawu danych przy użyciu metody ImportRow tabeli 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 zestawu danych, a następnie dodaje wiersze z oryginalnego zestawu danych do tabeli Customers w klonie DataSet dla klientów, dla 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 też