Όταν κάνεις da1.Update οι εγγραφές που ενημερώνονται στην βάση είναι αυτές που έχουν έχουν RowState Changed ή Added στο datatable. Μετά από Fill και Merge καμιά εγγραφή δεν έχει αυτό το state.
Οι εγγραφές παίρνουν αυτό το state όταν γίνουν αλλαγές σε αυτές ή όταν καλέσεις την SetModified ή SetAdded method της εγγραφής. Δοκίμασε το παρακάτω:
public void MergeTables(string connS1, string connS2)
{
string connString1 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS1;
string connString2 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS2;
OleDbConnection oleConn1 = new OleDbConnection(connString1);
OleDbConnection oleConn2 = new OleDbConnection(connString2);
string cmd1 = "SELECT *FROM db1_table1";
string cmd2 = "SELECT *FROM db2_table1";
OleDbDataAdapter da1 = new OleDbDataAdapter(cmd1, oleConn1);
OleDbDataAdapter da2 = new OleDbDataAdapter(cmd2, oleConn2);
DataSet ds1 = new DataSet();
da2.Fill(ds1, "db2_table1");
foreach (DataRow row in ds1.Tables["db2_table1"].Rows)
row.SetAdded();
OleDbCommandBuilder cmdBld = new OleDbCommandBuilder(da1);
da1.UpdateCommand = cmdBld.GetUpdateCommand();
@da1.Update(ds1, "db2_table1");
}
Όπως βλέπεις δεν χρειάζεται καθόλου να φορτώσεις τον 1ο πίνακα.
Επίσης το da1.Update η AcceptChanges καλείται αυτόματα, οπότε δεν χρειάζεται να την καλέσεις.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.