DataTable.Merge Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| Merge(DataTable, Boolean, MissingSchemaAction) |
Belirtilen DataTable öğesini, değişikliklerin korunup korunmayacağını ve geçerli |
| Merge(DataTable, Boolean) |
Belirtilen DataTable öğesini, geçerli |
| 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 ilk tabloyla birleştirmeyi dener.
Note
Bu örnekte, Merge'in aşırı yüklenmiş sürümlerinden birinin nasıl kullanılacağı gösterilmektedir. Kullanılabilir olabilecek diğer örnekler için tek tek aşırı yükleme konularına 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 nesnesini birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut bir DataTableeklemek için istemci uygulamasında kullanılır. Bu, istemci uygulamasının veri kaynağından en son verilerle yenilenmiş bir DataTable sahip olmasını sağlar.
Birleştirme işlemi yalnızca özgün tabloyu ve birleştirilecek tabloyu dikkate alır. Alt tablolar etkilenmez veya dahil değildir. 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
- 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şleneceğ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
- 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 ilk 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 nesnesini birleştirmek için kullanılır. Birleştirme genellikle bir veri kaynağındaki en son değişiklikleri mevcut bir DataTableeklemek için istemci uygulamasında kullanılır. Bu, istemci uygulamasının veri kaynağından en son verilerle yenilenmiş bir DataTable sahip olmasını sağlar.
Birleştirme işlemi yalnızca özgün tabloyu ve birleştirilecek tabloyu dikkate alır. Alt tablolar etkilenmez veya dahil değildir. 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ğrulamayı, hataları mutabık hale getirmeyi, veri kaynağını değişikliklerle güncelleştirmeyi ve son olarak var olan DataTableyenilemeyi 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 ayarlanırsatrue, gelen değerler var olan satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazılmaz.
preserveChanges parametresi olarak ayarlanırsafalse, gelen değerler var olan 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, GetChanges yöntemi önce çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci bir DataTable döndürür. Bu ikinci DataTable nesnesi yalnızca değiştirilen DataTable ve DataRow nesnelerini içerir ve bu da özgün DataTablebir 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 bir DataTable gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişiklikleri içeren 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 DataTableDataTable yöntemiyle istemci uygulamasının özgün 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, işletmeler arası bir senaryoda xml şemasına otomatik bir işlemle yeni sütunlar eklenmiş olabilir. Kaynak DataTable hedefte eksik olan şema öğeleri (DataColumn nesneler eklendi) içeriyorsa, missingSchemaAction bağımsız değişkeni MissingSchemaAction.Addolarak ayarlanarak şema öğeleri hedefe eklenebilir. Bu durumda, birleştirilmiş DataTable eklenen şemayı ve verileri içerir.
Şemalar birleştirildikten sonra veriler birleştirilir.
Yeni bir kaynak DataTable hedefle birleştirildiğinde, DataRowState, Unchangedveya ModifiedDeleted değerine sahip tüm kaynak satırlar aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir.
DataRowState
Added değerine sahip 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
- 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
DataTable geçerli DataTableile 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 verilerden bazılarını değiştirir ve farklı DataTablebir içindeki verileri birleştirmeye çalışır. Ö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 bir DataTableeklemek için istemci uygulamasında kullanılır. Bu, istemci uygulamasının veri kaynağından en son verilerle yenilenmiş bir DataTable sahip olmasını sağlar.
Birleştirme işlemi yalnızca özgün tabloyu ve birleştirilecek tabloyu dikkate alır. Alt tablolar etkilenmez veya dahil değildir. 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ğrulamayı, hataları mutabık hale getirmeyi, veri kaynağını değişikliklerle güncelleştirmeyi ve son olarak var olan DataTableyenilemeyi 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 ayarlanırsatrue, gelen değerler var olan satırın Geçerli satır sürümündeki mevcut değerlerin üzerine yazılmaz.
preserveChanges parametresi olarak ayarlanırsafalse, gelen değerler var olan 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, GetChanges yöntemi önce çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci bir DataTable döndürür. Bu ikinci DataTable nesnesi yalnızca değiştirilen DataTable ve DataRow nesnelerini içerir ve bu da özgün DataTablebir 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 bir DataTable gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişiklikleri içeren 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 DataTableDataTable yöntemiyle istemci uygulamasının özgün Merge birleştirilebilir.
Yeni bir kaynak DataTable hedefle birleştirildiğinde, DataRowState, Unchangedveya ModifiedDeleted değerine sahip tüm kaynak satırlar aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir.
DataRowState
Added değerine sahip 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
- Kaynak:
- DataTable.cs
- Kaynak:
- DataTable.cs
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
Örnekler
Aşağıdaki konsol uygulaması basit DataTable bir 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 bir DataTableeklemek için istemci uygulamasında kullanılır. Bu, istemci uygulamasının veri kaynağından en son verilerle yenilenmiş bir DataTable sahip olmasını sağlar.
Birleştirme işlemi yalnızca özgün tabloyu ve birleştirilecek tabloyu dikkate alır. Alt tablolar etkilenmez veya dahil değildir. 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ğrulamayı, hataları mutabık hale getirmeyi, veri kaynağını değişikliklerle güncelleştirmeyi ve son olarak var olan DataTableyenilemeyi içeren bir dizi yordamın sonunda çağrılır.
Birleştirme işlemi yapılırken, 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, GetChanges yöntemi önce çağrılır. Bu yöntem, doğrulama ve birleştirme için iyileştirilmiş ikinci bir DataTable döndürür. Bu ikinci DataTable nesne yalnızca DataRow değiştirilmiş 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 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 bir DataTable gönderebilir (özgün sorguyu yeniden çalıştırarak) veya veri kaynağından yapılan değişiklikleri içeren 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 DataTableDataTable yöntemiyle istemci uygulamasının özgün Merge birleştirilebilir.
Yeni bir kaynağı DataTable hedefle birleştirirken, değeri , DataRowStateveya Unchangedolan ModifiedDeletedtüm kaynak satırlar aynı birincil anahtar değerlerine sahip hedef satırlarla eşleştirilir.
DataRowState
Added değerine sahip kaynak satırlar, yeni kaynak satırlarla aynı birincil anahtar değerlerine sahip yeni hedef satırlarla eşleştirilir.