我想同步两个数据库之间的两个表。我认为最好的方法是使用DataTable.Merge方法。这似乎可以看到变化,但没有任何事情会被提交到数据库。如何同步两个数据表并更新数据库中的目标?
到目前为止,我有:
string tableName = "[Table_1]";
string sql = "select * from " + tableName;
using (SqlConnection sourceConn = new SqlConnection(ConfigurationManager.ConnectionStrings["source"].ConnectionString))
{
SqlDataAdapter sourceAdapter = new SqlDataAdapter();
sourceAdapter.SelectCommand = new SqlCommand(sql, sourceConn);
sourceConn.Open();
DataSet sourceDs = new DataSet();
sourceAdapter.Fill(sourceDs);
using (SqlConnection targetConn = new SqlConnection(ConfigurationManager.ConnectionStrings["target"].ConnectionString))
{
SqlDataAdapter targetAdapter = new SqlDataAdapter();
targetAdapter.SelectCommand = new SqlCommand(sql, targetConn);
SqlCommandBuilder builder = new SqlCommandBuilder(targetAdapter);
targetAdapter.InsertCommand = builder.GetInsertCommand();
targetAdapter.UpdateCommand = builder.GetUpdateCommand();
targetAdapter.DeleteCommand = builder.GetDeleteCommand();
targetConn.Open();
DataSet targetDs = new DataSet();
targetAdapter.Fill(targetDs);
targetDs.Tables[0].TableName = tableName;
sourceDs.Tables[0].TableName = tableName;
targetDs.Tables[0].Merge(sourceDs.Tables[0]);
targetAdapter.Update(targetDs.Tables[0]);
}
}
目前,存在这样是不是在目标的源一行。此行从不转移。我也尝试了一个空目标,没有任何东西被转移。
手表[0]显示正确的数据,但它不会被发送到数据库中。 我不确定InsertCommand等,行,但没有我在那里,命令为空。 – Craig 2010-04-19 13:42:44
嗯,你有没有尝试在targetAdapter.Update()方法之前添加targetDs.AcceptChanges()? – code4life 2010-04-20 02:30:11
是的,这也没有工作。 – Craig 2010-04-20 13:32:27