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
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 missingSchemaAction
Merge 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 DataTable
içinde eksik şemanın nasıl işlendiğini gösteren geçerli DataTable
ile 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 missingSchemaAction
Merge 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 true
ayarlanı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 false
ayarlanı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.Add
olarak 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 , Modified
veya Deleted
olan DataRowStateUnchanged
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
Merge(DataTable, Boolean)
- Kaynak:
- DataTable.cs
- Kaynak:
- DataTable.cs
- Kaynak:
- DataTable.cs
Belirtilen DataTable öğesini, geçerli DataTable
içindeki değişikliklerin korunup korunmayacağını belirten geçerli DataTable
ile 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 DataTable
DataTable
ile birleştirilecek .
- preserveChanges
- Boolean
true
, geçerli DataTable
iç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 true
ayarlanı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 false
ayarlanı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 , Modified
veya Deleted
olan DataRowStateUnchanged
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
Merge(DataTable)
- 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 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
, Modified
veya Deleted
olan 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.