Kopieren von DataSet-Inhalten

Sie können eine Kopie eines DataSet-Elements erstellen. Auf diese Weise können Sie mit den Daten arbeiten, ohne dass die ursprünglichen Daten beeinflusst werden, oder Sie können mit einer Teilmenge der Daten aus einem DataSet-Element arbeiten. Beim Kopieren eines DataSets-Elements haben Sie folgende Möglichkeiten:

  • Sie können eine exakte Kopie des DataSet-Elements erstellen (einschließlich Schema, Daten, Informationen zum Zeilenstatus und Zeilenversionen).

  • Sie können ein DataSet-Element erstellen, in dem das Schema eines vorhandenen DataSet-Elements enthalten ist. Es sollen aber nur Zeilen vorhanden sein, die bereits geändert wurden. Sie können alle Zeilen zurückgeben, die geändert wurden, oder Sie geben einen bestimmten DataRowState an. Weitere Informationen finden Sie unter Zeilenstatus und Zeilenversionen.

  • Sie können nur das Schema oder die relationale Struktur des DataSet-Elements kopieren, ohne die darin enthaltenen Zeilen zu kopieren. Zeilen können mit DataTable in eine vorhandene ImportRow importiert werden.

Verwenden Sie die Copy-Methode des DataSet-Elements zum Erstellen einer exakten Kopie des DataSet-Elements, die sowohl das Schema als auch die Daten enthält. Das folgende Codebeispiel veranschaulicht die Erstellung einer exakten Kopie des DataSet-Elements.

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

Um eine Kopie eines DataSet-Elements zu erstellen, die das Schema und nur Daten der Zeilen mit dem Status Added, Modified oder Deleted enthält, verwenden Sie die GetChanges-Methode des DataSet-Elements. Sie können mit GetChanges auch nur Zeilen mit einem bestimmten Zeilenstatus zurückgeben, indem Sie beim Aufrufen von GetChanges einen DataRowState-Wert übergeben. Im folgenden Codebeispiel wird gezeigt, wie beim Aufrufen von GetChanges ein DataRowState-Wert übergeben wird.

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

Verwenden Sie die Clone-Methode des DataSet-Elements zum Erstellen einer Kopie eines DataSet-Elements, die nur das Schema enthält. Sie können dem geklonten DataSet-Element mithilfe der ImportRow-Methode des DataTable-Elements auch vorhandene Zeilen hinzufügen. ImportRow fügt der angegebenen Tabelle Daten, den Zeilenstatus sowie Zeilenversionsinformationen hinzu. Spaltenwerte werden nur hinzugefügt, wenn der Spaltenname übereinstimmt und der Datentyp kompatibel ist.

Im folgenden Codebeispiel wird zunächst ein Klon eines DataSet-Elements erstellt. Anschließend werden die Zeilen aus dem ursprünglichen DataSet-Element der Customers-Tabelle im DataSet-Klon für Kunden hinzugefügt, deren CountryRegion-Spalte den Wert „Germany“ aufweist.

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

Siehe auch