DataSet.GetChanges Methode

Definition

Ruft eine Kopie der enthaltenden Änderungen ab, die DataSet seit dem letzten Laden oder seit AcceptChanges() dem Aufruf daran vorgenommen wurden.

Überlädt

Name Beschreibung
GetChanges()

Ruft eine Kopie der, die DataSet alle daran vorgenommenen Änderungen enthält, seit sie geladen wurde oder seit AcceptChanges() dem letzten Aufruf.

GetChanges(DataRowState)

Ruft eine Kopie der DataSet enthaltenden Änderungen ab, die seit dem letzten Laden oder seit AcceptChanges() dem Aufruf vorgenommen wurden, gefiltert nach DataRowState.

GetChanges()

Ruft eine Kopie der, die DataSet alle daran vorgenommenen Änderungen enthält, seit sie geladen wurde oder seit AcceptChanges() dem letzten Aufruf.

public:
 System::Data::DataSet ^ GetChanges();
public System.Data.DataSet GetChanges();
member this.GetChanges : unit -> System.Data.DataSet
Public Function GetChanges () As DataSet

Gibt zurück

Eine Kopie der Änderungen daraus DataSet , die Aktionen ausführen und später wieder mit Merge(DataSet)dieser zusammengeführt werden können. Wenn keine geänderten Zeilen gefunden werden, gibt die Methode zurück null.

Beispiele

Im folgenden Beispiel wird eine einfache DataSet Tabelle, zwei Spalten und zehn Zeilen erstellt. Zwei Werte werden geändert, und eine Zeile wird hinzugefügt. Mithilfe der Methode wird eine Teilmenge der geänderten Daten erstellt GetChanges . Nach der Abstimmung von Fehlern wird der Teilmenge eine neue Spalte hinzugefügt und das Schema geändert. Wenn die Merge Methode mit dem missingSchemaAction Satz MissingSchemaAction.Addaufgerufen wird, wird die neue Spalte dem Schema des ursprünglichen DataSet Objekts hinzugefügt.

private void DemonstrateMerge()
{
    // Create a DataSet with one table, two columns,
    // and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"),"");

    // DataColumn array to set primary key.
    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;

    // Create variable for temporary DataSet.
    DataSet changesDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+=new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;
    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }
    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");

    // If the table has changes or errors,
    // create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
        DataRowState.Added)&& dataSet.HasErrors)
    {
        // Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changesDataSet, "Subset values");

        // Insert code to reconcile errors. In this case, reject changes.
        foreach(DataTable changesTable in changesDataSet.Tables)
        {
            if (changesTable.HasErrors)
            {
                foreach(DataRow changesRow in changesTable.Rows)
                {
                    //Console.WriteLine(changesRow["Item"]);
                    if((int)changesRow["Item",DataRowVersion.Current ]> 100)
                    {
                        changesRow.RejectChanges();
                        changesRow.ClearErrors();
                    }
                }
            }
        }
        // Add a column to the changesDataSet.
        changesDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changesDataSet, "Reconciled subset values");
        // Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, false,
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}

private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine(label + "\n");
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}
Private Sub DemonstrateMerge()
    ' Create a DataSet with one table, two columns, 
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New DataColumn("Item", _
        Type.GetType("System.Int32"), "")

    ' Create DataColumn array to set primary key.
    Dim keyColumn(0) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet. 
    Dim changesDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Change row values.
    table.Rows(0)("Item") = 50
    table.Rows(1)("Item") = 111

    ' Add one row.
    row = table.NewRow()
    row("Item") = 74
    table.Rows.Add(row)

    ' Insert code for error checking. Set one row in error.
    table.Rows(1).RowError = "over 100"
    PrintValues(dataSet, "Modified and New Values")

    ' If the table has changes or errors, create a subset DataSet.
    If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges( _
            DataRowState.Modified Or DataRowState.Added)
        PrintValues(changesDataSet, "Subset values")

        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changesTable As DataTable
        For Each changesTable In  changesDataSet.Tables
            If changesTable.HasErrors Then
                Dim changesRow As DataRow
                For Each changesRow In  changesTable.Rows
                    'Console.WriteLine(changesRow["Item"]);
                    If CInt(changesRow("Item", _
                        DataRowVersion.Current)) > 100 Then
                        changesRow.RejectChanges()
                        changesRow.ClearErrors()
                    End If
                Next changesRow
            End If
        Next changesTable

        ' Add a column to the changesDataSet.
        changesDataSet.Tables("Items").Columns.Add( _
            New DataColumn("newColumn"))
        PrintValues(changesDataSet, "Reconciled subset values")

        ' Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub
        
 Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " + e.Action.ToString() _
        + ControlChars.Tab + e.Row.ItemArray(0).ToString())
 End Sub
    
Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(label + ControlChars.Cr)
     Dim table As DataTable
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " + table.TableName)
         Dim row As DataRow
         For Each row In  table.Rows
             Dim column As DataColumn
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub

Hinweise

Erstellt eine neue DataSet Kopie aller Zeilen im Original DataSet mit ausstehenden Änderungen. Beziehungseinschränkungen können dazu führen, dass dem Neuen DataSet zusätzliche, unveränderte Zeilen hinzugefügt werden, wenn die unveränderten Zeilen Primärschlüssel enthalten, die Fremdschlüsseln in den geänderten Zeilen entsprechen. Die Methode gibt zurück null , wenn im Original DataSet keine Zeilen mit ausstehenden Änderungen vorhanden sind.

Weitere Informationen

Gilt für:

GetChanges(DataRowState)

Ruft eine Kopie der DataSet enthaltenden Änderungen ab, die seit dem letzten Laden oder seit AcceptChanges() dem Aufruf vorgenommen wurden, gefiltert nach DataRowState.

public:
 System::Data::DataSet ^ GetChanges(System::Data::DataRowState rowStates);
public System.Data.DataSet GetChanges(System.Data.DataRowState rowStates);
member this.GetChanges : System.Data.DataRowState -> System.Data.DataSet
Public Function GetChanges (rowStates As DataRowState) As DataSet

Parameter

rowStates
DataRowState

Einer der DataRowState Werte.

Gibt zurück

Eine gefilterte Kopie der Datei, die DataSet Aktionen ausführen kann und anschließend wieder mit der Verwendung Merge(DataSet)zusammengeführt werden kann. Wenn keine Zeilen der gewünschten DataRowState Gefunden werden, gibt die Methode zurück null.

Beispiele

Im folgenden Beispiel wird die GetChanges Methode verwendet, um ein zweites DataSet Objekt zu erstellen, das dann zum Aktualisieren einer Datenquelle verwendet wird.

private void UpdateDataSet(DataSet dataSet)
{
    // Check for changes with the HasChanges method first.
    if(!dataSet.HasChanges(DataRowState.Modified)) return;

    // Create temporary DataSet variable and
    // GetChanges for modified rows only.
    DataSet tempDataSet =
        dataSet.GetChanges(DataRowState.Modified);

    // Check the DataSet for errors.
    if(tempDataSet.HasErrors)
    {
        // Insert code to resolve errors.
    }
    // After fixing errors, update the data source with
    // the DataAdapter used to create the DataSet.
    adapter.Update(tempDataSet);
}
Private Sub UpdateDataSet(ByVal dataSet As DataSet)
   ' Check for changes with the HasChanges method first.
   If Not dataSet.HasChanges(DataRowState.Modified) Then 
       Exit Sub
   End If

   ' Create temporary DataSet variable and
   ' GetChanges for modified rows only.
   Dim tempDataSet As DataSet = _
       dataSet.GetChanges(DataRowState.Modified)

   ' Check the DataSet for errors.
   If tempDataSet.HasErrors Then
      ' Insert code to resolve errors.
   End If

   ' After fixing errors, update the data source with   
   ' the DataAdapter used to create the DataSet.
   adapter.Update(tempDataSet)
End Sub

Hinweise

Die GetChanges Methode wird verwendet, um ein zweites DataSet Objekt zu erstellen, das nur die änderungen enthält, die in das Original eingeführt wurden. Verwenden Sie das rowStates Argument, um den Typ der Änderungen anzugeben, die das neue Objekt enthalten soll.

Diese zurückgegebene Kopie ist so konzipiert, dass sie wieder mit diesem Original DataSetzusammengeführt wird. Beziehungseinschränkungen können dazu führen, dass übergeordnete Zeilen Unchanged eingeschlossen werden. Wenn keine Zeilen der gewünschten DataRowState Gefunden werden, gibt die GetChanges Methode zurück null.

Weitere Informationen

Gilt für: