Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

DataTable.Merge-Methode: (DataTable)

 

Veröffentlicht: Oktober 2016

Führen Sie die angegebene DataTable mit dem aktuellen DataTable.

Namespace:   System.Data
Assembly:  System.Data (in System.Data.dll)

public void Merge(
	DataTable table
)

Parameter

table
Type: System.Data.DataTable

Die DataTable, die mit dem aktuellen DataTable zusammengeführt werden soll.

Die Merge-Methode wird verwendet, um zwei DataTable -Objekten, die Schemas weitgehend ähnlich sind. Eine Zusammenführung wird i. d. r. auf einer Client-Anwendung integriert die neuesten Änderungen aus einer Datenquelle in eine vorhandene DataTable. Dies ermöglicht es der Clientanwendung ein aktualisiertes haben DataTable mit den neuesten Daten aus der Datenquelle.

Der Zusammenführungsvorgang berücksichtigt nur die Originaltabelle und die Tabelle zusammengeführt werden sollen. Untergeordnete Tabellen sind nicht betroffen oder enthalten. Bei Tabellen mit einer oder mehreren untergeordneten Tabellen als Teil einer Beziehung definiert, muss die untergeordneten Tabellen einzeln zusammengeführt werden.

Die Merge -Methode erfolgt in der Regel am Ende einer Reihe von Verfahren, die Änderungen überprüfen, Abgleichen der Fehler, die Datenquelle mit den Änderungen aktualisiert und schließlich aktualisieren die vorhandene umfassen DataTable.

Wenn Sie eine Zusammenführung ausführen, werden Änderungen an die vorhandenen Daten vor der Zusammenführung standardmäßig während der Zusammenführung beibehalten. Entwickler können dieses Verhalten ändern, indem Sie eine der anderen zwei Überladungen für diese Methode aufrufen und einen false-Wert für angeben der preserveChanges Parameter.

In einer Clientanwendung ist es üblich, haben eine einzelne Schaltfläche, die der Benutzer klicken kann, die die geänderten Daten zu erfassen und zu validieren, bevor sie zurück an eine Komponente der mittleren Ebene gesendet werden. In diesem Szenario die GetChanges -Methode zuerst aufgerufen. Eine zweite Methode zurückgibt, DataTable für das Validieren und Zusammenführen optimiert. Dieses zweite DataTable -Objekt enthält nur die DataRow Objekte, die geändert wurden, was zu einer Teilmenge der ursprünglichen DataTable. Diese Teilmenge wird in der Regel kleiner und wird daher effizienter an eine Komponente der mittleren Ebene übergeben. Die Komponente der mittleren Ebene aktualisiert dann die ursprüngliche Datenquelle mit den Änderungen durch gespeicherte Prozeduren. Die mittlere Ebene können Sie senden, erstellen entweder eine neue DataTable enthält, die ursprünglichen Daten und die neuesten Daten aus der Datenquelle (indem Sie die ursprüngliche Abfrage erneut ausführen), oder senden wieder die Teilmenge mit den Änderungen, die sie aus der Datenquelle vorgenommen wurden. (Z. B. wenn die Datenquelle automatisch eindeutige Primärschlüsselwerte erstellt, können diese Werte an die Clientanwendung weitergegeben werden.) In beiden Fällen ist das zurückgegebene DataTable zusammengeführt werden können, in der Clientanwendung Original DataTable mit der Merge Methode.

Beim Zusammenführen einer neuen Quell- DataTable mit dem Ziel Quellzeilen mit einem DataRowState Wert Unchanged, Modified, oder Deleted, mit der gleichen Primärschlüsselwerte abgeglichen wird. Quellzeilen mit einem DataRowState Wert Added mit neuen Zielzeilen zugeordnet, die dieselben Primärschlüsselwerte wie die neuen verglichen werden.

Die folgende Konsolenanwendung erstellt eine einfache DataTable und der Tabelle Daten hinzugefügt. Das Beispiel erstellt dann eine Kopie der Tabelle, und fügen Zeilen mit der Kopie. Im Beispiel wird schließlich Ruft die Merge Methode, um die Daten in der zweiten Tabelle mit den Daten in der ersten Tabelle zusammenzuführen.

private static void DemonstrateMergeTable()
{
    DataTable table1 = new DataTable("Items");

    // Add columns
    DataColumn column1 = new DataColumn("id", typeof(System.Int32));
    DataColumn column2 = new DataColumn("item", typeof(System.Int32));
    table1.Columns.Add(column1);
    table1.Columns.Add(column2);

    // Set the primary key column.
    table1.PrimaryKey = new DataColumn[] { column1 };

    // Add RowChanged event handler for the table.
    table1.RowChanged += 
        new System.Data.DataRowChangeEventHandler(Row_Changed);

    // Add some rows.
    DataRow row;
    for (int i = 0; i <= 3; i++)
    {
        row = table1.NewRow();
        row["id"] = i;
        row["item"] = i;
        table1.Rows.Add(row);
    }

    // Accept changes.
    table1.AcceptChanges();
    PrintValues(table1, "Original values");

    // Create a second DataTable identical to the first.
    DataTable table2 = table1.Clone();

    // Add three rows. Note that the id column can't be the 
    // same as existing rows in the original table.
    row = table2.NewRow();
    row["id"] = 14;
    row["item"] = 774;
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    table2.Rows.Add(row);

    // Merge table2 into the table1.
    Console.WriteLine("Merging");
    table1.Merge(table2);
    PrintValues(table1, "Merged With table1");

}

private static void Row_Changed(object sender, 
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row changed {0}\t{1}", 
        e.Action, e.Row.ItemArray[0]);
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.Write("\t " + row[col].ToString());
        }
        Console.WriteLine();
    }
}

.NET Framework
Verfügbar seit 2.0
Zurück zum Anfang
Anzeigen: