DataTable.Merge Yöntem

Tanım

Belirtilen DataTable öğesini geçerli DataTableile birleştirin.

Aşırı Yüklemeler

Merge(DataTable, Boolean, MissingSchemaAction)

Belirtilen DataTable öğesini, değişikliklerin korunup korunmayacağını ve geçerli DataTableiçinde eksik şemanın nasıl işlendiğini gösteren geçerli DataTableile birleştirin.

Merge(DataTable, Boolean)

Belirtilen DataTable öğesini, geçerli DataTableiçindeki değişikliklerin korunup korunmayacağını belirten geçerli DataTableile birleştirin.

Merge(DataTable)

Belirtilen DataTable öğesini geçerli DataTableile birleştirin.

Örnekler

Aşağıdaki konsol uygulaması, yönteminin parametresinin missingSchemaActionMerge davranışını gösterir. Bu örnek, ikinci sürüm için şemayı değiştirerek aynı tablonun iki sürümünü oluşturur. Kod daha sonra ikinci tabloyu birinci tabloyla birleştirmeyi dener.

Not

Bu örnekte, Merge'in aşırı yüklenmiş sürümlerinden birinin nasıl kullanılacağı gösterilmektedir. Kullanılabilir diğer örnekler için tek tek aşırı yükleme konulara bakın.

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

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

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

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

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; 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 column to the second column, so that the
    // schemas no longer match.
    table2.Columns.Add("newColumn", typeof(System.String));

    // 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;
    row["newColumn"] = "new column 1";
    table2.Rows.Add(row);

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

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

    // Merge table2 into the table1.
    Console.WriteLine("Merging");
    table1.Merge(table2, false, MissingSchemaAction.Add);
    PrintValues(table1, "Merged With table1, schema added");
}

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();
    }
}
Private Sub DemonstrateMergeTable()
  Dim table1 As New DataTable("Items")

  ' Add columns
  Dim idColumn As New DataColumn("id", GetType(System.Int32))
  Dim itemColumn As New DataColumn("item", GetType(System.Int32))
  table1.Columns.Add(idColumn)
  table1.Columns.Add(itemColumn)

  ' Set the primary key column.
  table1.PrimaryKey = New DataColumn() {idColumn}

  ' Add RowChanged event handler for the table.
  AddHandler table1.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("id") = i
    row("item") = i
    table1.Rows.Add(row)
  Next i

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

  ' Create a second DataTable identical to the first.
  Dim table2 As DataTable = table1.Clone()

  ' Add column to the second column, so that the 
  ' schemas no longer match.
  table2.Columns.Add("newColumn", GetType(System.String))

  ' 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
  row("newColumn") = "new column 1"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 12
  row("item") = 555
  row("newColumn") = "new column 2"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 13
  row("item") = 665
  row("newColumn") = "new column 3"
  table2.Rows.Add(row)

  ' Merge table2 into the table1.
  Console.WriteLine("Merging")
  table1.Merge(table2, False, MissingSchemaAction.Add)
  PrintValues(table1, "Merged With table1, Schema added")
End Sub

Private Sub Row_Changed(ByVal sender As Object, _
      ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, _
      ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

Açıklamalar

Merge yöntemi, büyük ölçüde benzer şemalara sahip iki DataTable nesneyi birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut DataTablebir içine eklemek için bir istemci uygulamasında kullanılır. Bu, istemci uygulamanın veri kaynağından en son verilerle yenilenmesini DataTable sağlar.

Birleştirme işleminde yalnızca özgün tablo ve birleştirilecek tablo dikkate alınır. Alt tablolar etkilenmez veya dahil edilmez. Bir tabloda, bir ilişkinin parçası olarak tanımlanan bir veya daha fazla alt tablo varsa, her alt tablo ayrı ayrı birleştirilmelidir.

Merge(DataTable, Boolean, MissingSchemaAction)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

Belirtilen DataTable öğesini, değişikliklerin korunup korunmayacağını ve geçerli DataTableiçinde eksik şemanın nasıl işlendiğini gösteren geçerli DataTableile birleştirin.

public:
 void Merge(System::Data::DataTable ^ table, bool preserveChanges, System::Data::MissingSchemaAction missingSchemaAction);
public void Merge (System.Data.DataTable table, bool preserveChanges, System.Data.MissingSchemaAction missingSchemaAction);
member this.Merge : System.Data.DataTable * bool * System.Data.MissingSchemaAction -> unit
Public Sub Merge (table As DataTable, preserveChanges As Boolean, missingSchemaAction As MissingSchemaAction)

Parametreler

table
DataTable

geçerli DataTableDataTableile birleştirilecek .

preserveChanges
Boolean

true, geçerli DataTableiçindeki değişiklikleri korumak için ; aksi takdirde false.

missingSchemaAction
MissingSchemaAction

Değerlerden MissingSchemaAction biri.

Örnekler

Aşağıdaki konsol uygulaması, yönteminin parametresinin missingSchemaActionMerge davranışını gösterir. Bu örnek, ikinci sürüm için şemayı değiştirerek aynı tablonun iki sürümünü oluşturur. Kod daha sonra ikinci tabloyu birinci tabloyla birleştirmeyi dener.

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

    // Add columns
    DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
    DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
    itemsTable.Columns.Add(idColumn);
    itemsTable.Columns.Add(itemColumn);

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

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

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

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

    // Create a second DataTable identical to the first.
    DataTable itemsClone = itemsTable.Clone();

    // Add column to the second column, so that the
    // schemas no longer match.
    itemsClone.Columns.Add("newColumn", typeof(System.String));

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

    row = itemsClone.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    row["newColumn"] = "new column 2";
    itemsClone.Rows.Add(row);

    row = itemsClone.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    row["newColumn"] = "new column 3";
    itemsClone.Rows.Add(row);

    // Merge itemsClone into the itemsTable.
    Console.WriteLine("Merging");
    itemsTable.Merge(itemsClone, false, MissingSchemaAction.Add);
    PrintValues(itemsTable, "Merged With itemsTable, schema added");
}

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();
    }
}
Private Sub DemonstrateMergeTable()
  Dim itemsTable As New DataTable("Items")

  ' Add columns
  Dim idColumn As New DataColumn("id", GetType(System.Int32))
  Dim itemColumn As New DataColumn("item", GetType(System.Int32))
  itemsTable.Columns.Add(idColumn)
  itemsTable.Columns.Add(itemColumn)

  ' Set the primary key column.
  itemsTable.PrimaryKey = New DataColumn() {idColumn}

  ' Add RowChanged event handler for the table.
  AddHandler itemsTable.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = itemsTable.NewRow()
    row("id") = i
    row("item") = i
    itemsTable.Rows.Add(row)
  Next i

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

  ' Create a second DataTable identical to the first.
  Dim itemsClone As DataTable = itemsTable.Clone()

  ' Add column to the second column, so that the 
  ' schemas no longer match.
  itemsClone.Columns.Add("newColumn", GetType(System.String))

  ' Add three rows. Note that the id column can't be the 
  ' same as existing rows in the original table.
  row = itemsClone.NewRow()
  row("id") = 14
  row("item") = 774
  row("newColumn") = "new column 1"
  itemsClone.Rows.Add(row)

  row = itemsClone.NewRow()
  row("id") = 12
  row("item") = 555
  row("newColumn") = "new column 2"
  itemsClone.Rows.Add(row)

  row = itemsClone.NewRow()
  row("id") = 13
  row("item") = 665
  row("newColumn") = "new column 3"
  itemsClone.Rows.Add(row)

  ' Merge itemsClone into the itemsTable.
  Console.WriteLine("Merging")
  itemsTable.Merge(itemsClone, False, MissingSchemaAction.Add)
  PrintValues(itemsTable, "Merged With itemsTable, Schema added")
End Sub

Private Sub Row_Changed(ByVal sender As Object, _
  ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

Açıklamalar

Merge yöntemi, büyük ölçüde benzer şemalara sahip iki DataTable nesneyi birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut DataTablebir içine eklemek için bir istemci uygulamasında kullanılır. Bu, istemci uygulamanın veri kaynağından en son verilerle yenilenmesini DataTable sağlar.

Birleştirme işleminde yalnızca özgün tablo ve birleştirilecek tablo dikkate alınır. Alt tablolar etkilenmez veya dahil edilmez. Bir tabloda, bir ilişkinin parçası olarak tanımlanan bir veya daha fazla alt tablo varsa, her alt tablo ayrı ayrı birleştirilmelidir.

Merge yöntemi genellikle değişiklikleri doğrulama, hataları mutabık bırakma, veri kaynağını değişikliklerle güncelleştirme ve son olarak mevcut DataTableöğesini yenilemeyi içeren bir dizi yordamın sonunda çağrılır.

Birleştirme gerçekleştirirken, birleştirme işleminden önce var olan verilerde yapılan değişiklikler, geliştirici parametre için preserveChanges false belirtmediği sürece birleştirme işlemi sırasında korunur. preserveChanges parametresi olarak trueayarlanırsa, gelen değerler mevcut satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazılmaz. preserveChanges parametresi olarak falseayarlanırsa, gelen değerler mevcut satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazar. Satır sürümleri hakkında daha fazla bilgi için bkz. Satır Durumları ve Satır Sürümleri.

İstemci uygulamasında, kullanıcının tıklayarak değiştirilen verileri toplayan ve orta katman bileşenine geri göndermeden önce doğrulayan tek bir düğme olması normaldir. Bu senaryoda yöntemi GetChanges ilk olarak çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci DataTable bir değer döndürür. Bu ikinci DataTable nesne yalnızca DataTable değiştirilen ve DataRow nesnelerini içerir ve özgün DataTableöğesinin bir alt kümesiyle sonuçlanır. Bu alt küme genellikle daha küçüktür ve bu nedenle bu alt küme daha verimli bir şekilde orta katman bileşenine geri geçirilir. Orta katman bileşeni daha sonra özgün veri kaynağını saklı yordamlar aracılığıyla değişikliklerle güncelleştirir. Orta katman daha sonra özgün verileri ve veri kaynağından en son verileri içeren yeni DataTable bir veri gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişikliklerle alt kümeyi geri gönderebilir. (Örneğin, veri kaynağı otomatik olarak benzersiz birincil anahtar değerleri oluşturursa, bu değerler istemci uygulamasına geri yayılabilir.) Her iki durumda da döndürülen DataTable , yöntemiyle istemci uygulamasının özgün DataTable dosyasıyla Merge birleştirilebilir.

Merge yöntemi çağrıldığında, iki DataTable nesnenin şemaları karşılaştırılır, çünkü şemalar değiştirilmiş olabilir. Örneğin, bir "işletmeden işletmeye" senaryosunda, yeni sütunlar bir XML şemasına otomatik bir işlem tarafından eklenmiş olabilir. KaynakDataTable, hedefte eksik olan şema öğeleri (eklenen DataColumn nesneler) içeriyorsa, bağımsız değişkeni MissingSchemaAction.Addolarak ayarlanarak missingSchemaAction şema öğeleri hedefe eklenebilir. Bu durumda, birleştirilen DataTable eklenen şemayı ve verileri içerir.

Şemaları birleştirdikten sonra veriler birleştirilir.

Yeni bir kaynağı DataTable hedefle birleştirirken, değeri , Modifiedveya Deleted olan DataRowStateUnchangedtüm kaynak satırlar, aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir. değeri Added olan DataRowState kaynak satırlar, yeni kaynak satırlarla aynı birincil anahtar değerlerine sahip yeni hedef satırlarla eşleştirilir.

Ayrıca bkz.

Şunlara uygulanır

Merge(DataTable, Boolean)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

Belirtilen DataTable öğesini, geçerli DataTableiçindeki değişikliklerin korunup korunmayacağını belirten geçerli DataTableile birleştirin.

public:
 void Merge(System::Data::DataTable ^ table, bool preserveChanges);
public void Merge (System.Data.DataTable table, bool preserveChanges);
member this.Merge : System.Data.DataTable * bool -> unit
Public Sub Merge (table As DataTable, preserveChanges As Boolean)

Parametreler

table
DataTable

geçerli DataTableDataTableile birleştirilecek .

preserveChanges
Boolean

true, geçerli DataTableiçindeki değişiklikleri korumak için ; aksi takdirde false.

Örnekler

Aşağıdaki konsol uygulaması içeren bir DataTable satır oluşturur, bu satırlardaki bazı verileri değiştirir ve farklı DataTablebir içindeki verileri birleştirmeyi dener. Örnekte parametresi için farklı davranışlar gösterilmektedir preserveChanges .


private static void DemonstrateMergeTable()
{
    // Demonstrate merging, within and without
    // preserving changes.

    // In this example, take these actions:
    // 1. Create a DataTable (table1) and fill the table with data.
    // 2. Create a copy of table1, and modify its data (modifiedTable).
    // 3. Modify data in table1.
    // 4. Make a copy of table1 (table1Copy).
    // 5. Merge the data from modifiedTable into table1 and table1Copy,
    //    showing the difference between setting the preserveChanges
    //    parameter to true and false.

    // Create a new DataTable.
    DataTable table1 = new DataTable("Items");

    // Add two columns to the table:
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table1.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table1.Columns.Add(column);

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

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

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

    // Using the same schema as the original table,
    // modify the data for later merge.
    DataTable modifiedTable = table1.Copy();
    foreach (DataRow rowModified in modifiedTable.Rows)
    {
        rowModified["item"] = rowModified["item"].ToString()
            + " modified";
    }
    modifiedTable.AcceptChanges();

    // Change row values, and add a new row:
    table1.Rows[0]["item"] = "new Item 0";
    table1.Rows[1]["item"] = "new Item 1";

    row = table1.NewRow();
    row["id"] = 4;
    row["item"] = "Item 4";
    table1.Rows.Add(row);

    // Get a copy of the modified data:
    DataTable table1Copy = table1.Copy();
    PrintValues(table1, "Modified and new Values");
    PrintValues(modifiedTable, "Data to be merged into table1");

    // Merge new data into the modified data.
    table1.Merge(modifiedTable, true);
    PrintValues(table1, "Merged data (preserve changes)");

    table1Copy.Merge(modifiedTable, false);
    PrintValues(table1Copy, "Merged data (don't preserve changes)");
}

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 column in table.Columns)
        {
            Console.Write("\t{0}", row[column, DataRowVersion.Current]);
        }
        Console.WriteLine();
    }
}
Private Sub DemonstrateMergeTable()
  ' Demonstrate merging, within and without
  ' preserving changes.

  ' In this example, take these actions:
  ' 1. Create a DataTable (table1) and fill the table with data.
  ' 2. Create a copy of table1, and modify its data (modifiedTable).
  ' 3. Modify data in table1.
  ' 4. Make a copy of table1 (table1Copy).
  ' 5. Merge the data from modifiedTable into table1 and table1Copy, 
  '    showing the difference between setting the preserveChanges 
  '    parameter to true and false.

  ' Create a new DataTable.
  Dim table1 As New DataTable("Items")

  ' Add two columns to the table:
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table1.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table1.Columns.Add(column)

  ' Set primary key column.
  table1.PrimaryKey = New DataColumn() {table1.Columns(0)}

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("item") = "Item " & i
    table1.Rows.Add(row)
  Next i

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

  ' Using the same schema as the original table, 
  ' modify the data for later merge.
  Dim modifiedTable As DataTable = table1.Copy()
  For Each row In modifiedTable.Rows
    row("item") = row("item").ToString() & " modified"
  Next
  modifiedTable.AcceptChanges()

  ' Change row values, and add a new row:
  table1.Rows(0)("item") = "New Item 0"
  table1.Rows(1)("item") = "New Item 1"

  row = table1.NewRow()
  row("id") = 4
  row("item") = "Item 4"
  table1.Rows.Add(row)

  ' Get a copy of the modified data:
  Dim table1Copy As DataTable = table1.Copy()
  PrintValues(table1, "Modified and New Values")
  PrintValues(modifiedTable, "Data to be merged into table1")


  ' Merge new data into the modified data.
  table1.Merge(modifiedTable, True)
  PrintValues(table1, "Merged data (preserve changes)")

  table1Copy.Merge(modifiedTable, False)
  PrintValues(table1Copy, "Merged data (don't preserve changes)")

End Sub

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)

  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column, _
          DataRowVersion.Current))
    Next column
    Console.WriteLine()
  Next row
End Sub

Açıklamalar

Merge yöntemi, büyük ölçüde benzer şemalara sahip iki DataTable nesneyi birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut DataTablebir içine eklemek için bir istemci uygulamasında kullanılır. Bu, istemci uygulamanın veri kaynağından en son verilerle yenilenmesini DataTable sağlar.

Birleştirme işleminde yalnızca özgün tablo ve birleştirilecek tablo dikkate alınır. Alt tablolar etkilenmez veya dahil edilmez. Bir tabloda, bir ilişkinin parçası olarak tanımlanan bir veya daha fazla alt tablo varsa, her alt tablo ayrı ayrı birleştirilmelidir.

Merge yöntemi genellikle değişiklikleri doğrulama, hataları mutabık bırakma, veri kaynağını değişikliklerle güncelleştirme ve son olarak mevcut DataTableöğesini yenilemeyi içeren bir dizi yordamın sonunda çağrılır.

Birleştirme gerçekleştirirken, birleştirme işleminden önce var olan verilerde yapılan değişiklikler, geliştirici parametre için preserveChanges false belirtmediği sürece birleştirme işlemi sırasında korunur. preserveChanges parametresi olarak trueayarlanırsa, gelen değerler mevcut satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazılmaz. preserveChanges parametresi olarak falseayarlanırsa, gelen değerler mevcut satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazar. Satır sürümleri hakkında daha fazla bilgi için bkz. Satır Durumları ve Satır Sürümleri.

İstemci uygulamasında, kullanıcının tıklayarak değiştirilen verileri toplayan ve orta katman bileşenine geri göndermeden önce doğrulayan tek bir düğme olması normaldir. Bu senaryoda yöntemi GetChanges ilk olarak çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci DataTable bir değer döndürür. Bu ikinci DataTable nesne yalnızca DataTable değiştirilen ve DataRow nesnelerini içerir ve özgün DataTableöğesinin bir alt kümesiyle sonuçlanır. Bu alt küme genellikle daha küçüktür ve bu nedenle bu alt küme daha verimli bir şekilde orta katman bileşenine geri geçirilir. Orta katman bileşeni daha sonra özgün veri kaynağını saklı yordamlar aracılığıyla değişikliklerle güncelleştirir. Orta katman daha sonra özgün verileri ve veri kaynağından en son verileri içeren yeni DataTable bir veri gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişikliklerle alt kümeyi geri gönderebilir. (Örneğin, veri kaynağı otomatik olarak benzersiz birincil anahtar değerleri oluşturursa, bu değerler istemci uygulamasına geri yayılabilir.) Her iki durumda da döndürülen DataTable , yöntemiyle istemci uygulamasının özgün DataTable dosyasıyla Merge birleştirilebilir.

Yeni bir kaynağı DataTable hedefle birleştirirken, değeri , Modifiedveya Deleted olan DataRowStateUnchangedtüm kaynak satırlar, aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir. değeri Added olan DataRowState kaynak satırlar, yeni kaynak satırlarla aynı birincil anahtar değerlerine sahip yeni hedef satırlarla eşleştirilir.

Ayrıca bkz.

Şunlara uygulanır

Merge(DataTable)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

Belirtilen DataTable öğesini geçerli DataTableile birleştirin.

public:
 void Merge(System::Data::DataTable ^ table);
public void Merge (System.Data.DataTable table);
member this.Merge : System.Data.DataTable -> unit
Public Sub Merge (table As DataTable)

Parametreler

table
DataTable

geçerli DataTableDataTableile birleştirilecek .

Örnekler

Aşağıdaki konsol uygulaması basit DataTable bir uygulama oluşturur ve tabloya veri ekler. Örnek daha sonra tablonun bir kopyasını oluşturur ve kopyaya satır ekler. Son olarak, örnek ikinci tablodaki verileri ilk tablodaki verilerle birleştirmek için yöntemini çağırır Merge .

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();
    }
}
Private Sub DemonstrateMergeTable()
  Dim table1 As New DataTable("Items")

  ' Add columns
  Dim column1 As New DataColumn("id", GetType(System.Int32))
  Dim column2 As New DataColumn("item", GetType(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.
  AddHandler table1.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("id") = i
    row("item") = i
    table1.Rows.Add(row)
  Next i

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

  ' Create a second DataTable identical to the first.
  Dim table2 As DataTable = 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")

End Sub

Private Sub Row_Changed(ByVal sender As Object, _
  ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

Açıklamalar

Merge yöntemi, büyük ölçüde benzer şemalara sahip iki DataTable nesneyi birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut DataTablebir içine eklemek için bir istemci uygulamasında kullanılır. Bu, istemci uygulamanın veri kaynağından en son verilerle yenilenmesini DataTable sağlar.

Birleştirme işleminde yalnızca özgün tablo ve birleştirilecek tablo dikkate alınır. Alt tablolar etkilenmez veya dahil edilmez. Bir tabloda, bir ilişkinin parçası olarak tanımlanan bir veya daha fazla alt tablo varsa, her alt tablo ayrı ayrı birleştirilmelidir.

Merge yöntemi genellikle değişiklikleri doğrulama, hataları mutabık bırakma, veri kaynağını değişikliklerle güncelleştirme ve son olarak mevcut DataTableöğesini yenilemeyi içeren bir dizi yordamın sonunda çağrılır.

Birleştirme gerçekleştirilirken, birleştirme işleminden önce var olan verilerde yapılan değişiklikler varsayılan olarak korunur. Geliştiriciler bu yöntem için diğer iki aşırı yüklemeden birini çağırarak ve parametresi için preserveChanges yanlış bir değer belirterek bu davranışı değiştirebilir.

İstemci uygulamasında, kullanıcının tıklayarak değiştirilen verileri toplayan ve orta katman bileşenine geri göndermeden önce doğrulayan tek bir düğme olması normaldir. Bu senaryoda yöntemi GetChanges ilk olarak çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci DataTable bir değer döndürür. Bu ikinci DataTable nesne yalnızca DataRow değiştirilen nesneleri içerir ve bu da özgün DataTableöğesinin bir alt kümesiyle sonuçlanır. Bu alt küme genellikle daha küçüktür ve bu nedenle orta katman bileşenine daha verimli bir şekilde geçirilir. Orta katman bileşeni daha sonra özgün veri kaynağını saklı yordamlar aracılığıyla değişikliklerle güncelleştirir. Orta katman daha sonra özgün verileri ve veri kaynağından en son verileri içeren yeni DataTable bir veri gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişikliklerle alt kümeyi geri gönderebilir. (Örneğin, veri kaynağı otomatik olarak benzersiz birincil anahtar değerleri oluşturursa, bu değerler istemci uygulamasına geri yayılabilir.) Her iki durumda da döndürülen DataTable , yöntemiyle istemci uygulamasının özgün DataTable dosyasıyla Merge birleştirilebilir.

Yeni bir kaynak DataTable hedefle birleştirilirken, değeri Unchanged, Modifiedveya Deletedolan DataRowState tüm kaynak satırlar aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir. değeri Added olan DataRowState kaynak satırlar, yeni kaynak satırlarla aynı birincil anahtar değerlerine sahip yeni hedef satırlarla eşleştirilir.

Ayrıca bkz.

Şunlara uygulanır