DataTable.Merge Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Overload
Merge(DataTable, Boolean, MissingSchemaAction) |
Gabungkan yang ditentukan DataTable dengan saat ini |
Merge(DataTable, Boolean) |
Gabungkan yang ditentukan DataTable dengan saat ini |
Merge(DataTable) |
Gabungkan yang ditentukan DataTable dengan saat ini DataTable. |
Contoh
Aplikasi konsol berikut menunjukkan perilaku missingSchemaAction
parameter Merge metode . Contoh ini membuat dua versi tabel yang sama, memodifikasi skema untuk versi kedua. Kode kemudian mencoba menggabungkan tabel kedua ke dalam tabel pertama.
Catatan
Contoh ini menunjukkan cara menggunakan salah satu versi Gabungan yang kelebihan beban. Untuk contoh lain yang mungkin tersedia, lihat topik kelebihan beban individual.
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
Keterangan
Metode Merge
ini digunakan untuk menggabungkan dua DataTable objek yang sebagian besar memiliki skema serupa. Penggabungan biasanya digunakan pada aplikasi klien untuk menggabungkan perubahan terbaru dari sumber data ke dalam yang sudah ada DataTable. Ini memungkinkan aplikasi klien untuk memiliki refresh DataTable dengan data terbaru dari sumber data.
Operasi penggabungan hanya memperhitungkan tabel asli, dan tabel yang akan digabungkan. Tabel anak tidak terpengaruh atau disertakan. Jika tabel memiliki satu atau beberapa tabel anak, yang didefinisikan sebagai bagian dari hubungan, setiap tabel anak harus digabungkan satu per satu.
Merge(DataTable, Boolean, MissingSchemaAction)
- Sumber:
- DataTable.cs
- Sumber:
- DataTable.cs
- Sumber:
- DataTable.cs
Gabungkan yang ditentukan DataTable dengan saat ini DataTable
, menunjukkan apakah akan mempertahankan perubahan dan cara menangani skema yang hilang di saat ini DataTable
.
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)
Parameter
- preserveChanges
- Boolean
true
, untuk mempertahankan perubahan dalam saat ini DataTable; jika tidak false
.
- missingSchemaAction
- MissingSchemaAction
Salah MissingSchemaAction satu nilai.
Contoh
Aplikasi konsol berikut menunjukkan perilaku missingSchemaAction
parameter Merge metode . Contoh ini membuat dua versi tabel yang sama, memodifikasi skema untuk versi kedua. Kode kemudian mencoba menggabungkan tabel kedua ke dalam tabel pertama.
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
Keterangan
Metode Merge
ini digunakan untuk menggabungkan dua DataTable objek yang sebagian besar memiliki skema serupa. Penggabungan biasanya digunakan pada aplikasi klien untuk menggabungkan perubahan terbaru dari sumber data ke dalam yang sudah ada DataTable. Ini memungkinkan aplikasi klien untuk memiliki refresh DataTable dengan data terbaru dari sumber data.
Operasi penggabungan hanya memperhitungkan tabel asli, dan tabel yang akan digabungkan. Tabel anak tidak terpengaruh atau disertakan. Jika tabel memiliki satu atau beberapa tabel anak, yang didefinisikan sebagai bagian dari hubungan, setiap tabel anak harus digabungkan satu per satu.
Metode Merge
ini biasanya dipanggil di akhir serangkaian prosedur yang melibatkan validasi perubahan, merekonsiliasi kesalahan, memperbarui sumber data dengan perubahan, dan akhirnya me-refresh yang ada DataTable.
Saat melakukan penggabungan, perubahan yang dilakukan pada data yang ada sebelum penggabungan dipertahankan selama operasi penggabungan kecuali pengembang menentukan false untuk preserveChanges
parameter . preserveChanges
Jika parameter diatur ke true
, nilai masuk tidak menimpa nilai yang ada di versi baris saat ini dari baris yang ada. preserveChanges
Jika parameter diatur ke false
, nilai masuk akan menimpa nilai yang ada di versi baris Saat ini dari baris yang ada. Untuk informasi selengkapnya tentang versi baris, lihat Status Baris dan Versi Baris.
Dalam aplikasi klien, biasanya memiliki satu tombol yang dapat diklik pengguna yang mengumpulkan data yang diubah dan memvalidasinya sebelum mengirimkannya kembali ke komponen tingkat menengah. Dalam skenario ini, GetChanges metode pertama kali dipanggil. Metode tersebut mengembalikan kedua DataTable yang dioptimalkan untuk memvalidasi dan menggabungkan. Objek kedua DataTable ini hanya DataTable berisi objek dan DataRow yang diubah, menghasilkan subset dari aslinya DataTable. Subset ini umumnya lebih kecil, dan dengan demikian subset ini lebih efisien diteruskan kembali ke komponen tingkat menengah. Komponen tingkat tengah kemudian memperbarui sumber data asli dengan perubahan melalui prosedur tersimpan. Tingkat tengah kemudian dapat mengirim kembali data baru DataTable yang menyertakan data asli dan data terbaru dari sumber data (dengan menjalankan kueri asli lagi), atau dapat mengirim kembali subset dengan perubahan apa pun yang telah dilakukan padanya dari sumber data. (Misalnya, jika sumber data secara otomatis membuat nilai kunci primer yang unik, nilai-nilai ini dapat disebarluaskan kembali ke aplikasi klien.) Dalam kedua kasus, yang dikembalikan dapat digabungkan DataTable kembali ke aplikasi klien asli DataTable dengan Merge metode .
Merge Ketika metode dipanggil, skema dari dua DataTable objek dibandingkan, karena ada kemungkinan bahwa skema mungkin telah diubah. Misalnya, dalam skenario bisnis ke bisnis, kolom baru mungkin telah ditambahkan ke skema XML oleh proses otomatis. Jika sumber DataTable berisi elemen skema (objek tambahan DataColumn ) yang hilang dalam target, elemen skema dapat ditambahkan ke target dengan mengatur missingSchemaAction
argumen ke MissingSchemaAction.Add
. Dalam hal ini, gabungan DataTable berisi skema dan data yang ditambahkan.
Setelah menggabungkan skema, data digabungkan.
Saat menggabungkan sumber DataTable baru ke dalam target, baris sumber apa pun dengan DataRowState nilai Unchanged
, , Modified
atau Deleted
dicocokkan dengan baris target dengan nilai kunci primer yang sama. Baris sumber dengan nilai Added
dicocokkan dengan baris target baru dengan nilai kunci primer yang sama dengan DataRowState baris sumber baru.
Lihat juga
Berlaku untuk
Merge(DataTable, Boolean)
- Sumber:
- DataTable.cs
- Sumber:
- DataTable.cs
- Sumber:
- DataTable.cs
Gabungkan yang ditentukan DataTable dengan saat ini DataTable
, menunjukkan apakah akan mempertahankan perubahan dalam saat ini DataTable
.
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)
Parameter
- table
- DataTable
yang DataTable
akan digabungkan dengan saat ini DataTable
.
- preserveChanges
- Boolean
true
, untuk mempertahankan perubahan dalam saat ini DataTable
; jika tidak false
.
Contoh
Aplikasi konsol berikut membuat baris yang DataTable berisi, memodifikasi beberapa data di baris tersebut, dan mencoba menggabungkan data dari yang berbeda DataTable. Contoh menunjukkan perilaku yang berbeda untuk preserveChanges
parameter .
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
Keterangan
Metode Gabungkan digunakan untuk menggabungkan dua DataTable objek yang sebagian besar memiliki skema serupa. Penggabungan biasanya digunakan pada aplikasi klien untuk menggabungkan perubahan terbaru dari sumber data ke dalam yang sudah ada DataTable. Ini memungkinkan aplikasi klien untuk memiliki refresh DataTable dengan data terbaru dari sumber data.
Operasi penggabungan hanya memperhitungkan tabel asli, dan tabel yang akan digabungkan. Tabel anak tidak terpengaruh atau disertakan. Jika tabel memiliki satu atau beberapa tabel anak, yang didefinisikan sebagai bagian dari hubungan, setiap tabel anak harus digabungkan satu per satu.
Metode Merge
ini biasanya dipanggil di akhir serangkaian prosedur yang melibatkan validasi perubahan, merekonsiliasi kesalahan, memperbarui sumber data dengan perubahan, dan akhirnya me-refresh yang ada DataTable.
Saat melakukan penggabungan, perubahan yang dilakukan pada data yang ada sebelum penggabungan dipertahankan selama operasi penggabungan kecuali pengembang menentukan false untuk preserveChanges
parameter . preserveChanges
Jika parameter diatur ke true
, nilai masuk tidak menimpa nilai yang ada di versi baris saat ini dari baris yang ada. preserveChanges
Jika parameter diatur ke false
, nilai masuk akan menimpa nilai yang ada di versi baris Saat ini dari baris yang ada. Untuk informasi selengkapnya tentang versi baris, lihat Status Baris dan Versi Baris.
Dalam aplikasi klien, biasanya memiliki satu tombol yang dapat diklik pengguna yang mengumpulkan data yang diubah dan memvalidasinya sebelum mengirimkannya kembali ke komponen tingkat menengah. Dalam skenario ini, GetChanges metode pertama kali dipanggil. Metode tersebut mengembalikan kedua DataTable yang dioptimalkan untuk memvalidasi dan menggabungkan. Objek kedua DataTable ini hanya DataTable berisi objek dan DataRow yang diubah, menghasilkan subset dari aslinya DataTable. Subset ini umumnya lebih kecil, dan dengan demikian subset ini lebih efisien diteruskan kembali ke komponen tingkat menengah. Komponen tingkat tengah kemudian memperbarui sumber data asli dengan perubahan melalui prosedur tersimpan. Tingkat tengah kemudian dapat mengirim kembali data baru DataTable yang menyertakan data asli dan data terbaru dari sumber data (dengan menjalankan kueri asli lagi), atau dapat mengirim kembali subset dengan perubahan apa pun yang telah dilakukan padanya dari sumber data. (Misalnya, jika sumber data secara otomatis membuat nilai kunci primer yang unik, nilai-nilai ini dapat disebarluaskan kembali ke aplikasi klien.) Dalam kedua kasus, yang dikembalikan dapat digabungkan DataTable kembali ke aplikasi klien asli DataTable dengan Merge metode .
Saat menggabungkan sumber DataTable baru ke dalam target, baris sumber apa pun dengan DataRowState nilai Unchanged
, , Modified
atau Deleted
dicocokkan dengan baris target dengan nilai kunci primer yang sama. Baris sumber dengan nilai Added
dicocokkan dengan baris target baru dengan nilai kunci primer yang sama dengan DataRowState baris sumber baru.
Lihat juga
Berlaku untuk
Merge(DataTable)
- Sumber:
- DataTable.cs
- Sumber:
- DataTable.cs
- Sumber:
- 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)
Parameter
Contoh
Aplikasi konsol berikut membuat data sederhana DataTable dan menambahkan data ke tabel. Contoh kemudian membuat salinan tabel, menambahkan baris ke salinan. Terakhir, contoh memanggil Merge metode untuk menggabungkan data dalam tabel kedua dengan data dalam tabel pertama.
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
Keterangan
Metode Gabungkan digunakan untuk menggabungkan dua DataTable objek yang sebagian besar memiliki skema serupa. Penggabungan biasanya digunakan pada aplikasi klien untuk menggabungkan perubahan terbaru dari sumber data ke dalam yang sudah ada DataTable. Ini memungkinkan aplikasi klien untuk memiliki refresh DataTable dengan data terbaru dari sumber data.
Operasi penggabungan hanya memperhitungkan tabel asli, dan tabel yang akan digabungkan. Tabel anak tidak terpengaruh atau disertakan. Jika tabel memiliki satu atau beberapa tabel anak, yang didefinisikan sebagai bagian dari hubungan, setiap tabel anak harus digabungkan satu per satu.
Metode Merge
ini biasanya dipanggil di akhir serangkaian prosedur yang melibatkan validasi perubahan, merekonsiliasi kesalahan, memperbarui sumber data dengan perubahan, dan akhirnya me-refresh yang ada DataTable.
Saat melakukan penggabungan, perubahan yang dilakukan pada data yang ada sebelum penggabungan dipertahankan secara default selama operasi penggabungan. Pengembang dapat memodifikasi perilaku ini dengan memanggil salah satu dari dua kelebihan beban lainnya untuk metode ini, dan menentukan nilai palsu untuk preserveChanges
parameter .
Dalam aplikasi klien, biasanya memiliki satu tombol yang dapat diklik pengguna yang mengumpulkan data yang diubah dan memvalidasinya sebelum mengirimkannya kembali ke komponen tingkat menengah. Dalam skenario ini, GetChanges metode pertama kali dipanggil. Metode tersebut mengembalikan kedua DataTable yang dioptimalkan untuk memvalidasi dan menggabungkan. Objek kedua DataTable ini hanya DataRow berisi objek yang diubah, menghasilkan subset dari aslinya DataTable. Subset ini umumnya lebih kecil dan dengan demikian lebih efisien diteruskan kembali ke komponen tingkat menengah. Komponen tingkat tengah kemudian memperbarui sumber data asli dengan perubahan melalui prosedur tersimpan. Tingkat tengah kemudian dapat mengirim kembali data baru DataTable yang menyertakan data asli dan data terbaru dari sumber data (dengan menjalankan kueri asli lagi), atau dapat mengirim kembali subset dengan perubahan apa pun yang telah dilakukan padanya dari sumber data. (Misalnya, jika sumber data secara otomatis membuat nilai kunci primer yang unik, nilai-nilai ini dapat disebarluaskan kembali ke aplikasi klien.) Dalam kedua kasus, yang dikembalikan dapat digabungkan DataTable kembali ke aplikasi klien asli DataTable dengan Merge metode .
Saat menggabungkan sumber DataTable baru ke dalam target, baris sumber apa pun dengan DataRowState nilai Unchanged
, , Modified
atau Deleted
, dicocokkan dengan baris target dengan nilai kunci primer yang sama. Baris sumber dengan nilai Added
dicocokkan dengan baris target baru dengan nilai kunci primer yang sama dengan DataRowState baris sumber baru.