C# 如何同步两个数据表并更新数据库中的目标?

C# 如何同步两个数据表并更新数据库中的目标?,c#,merge,datatable,sqldataadapter,C#,Merge,Datatable,Sqldataadapter,我正在尝试在两个数据库之间同步两个表。我认为最好的方法是使用DataTable.Merge方法。这似乎可以获取更改,但没有任何内容提交到数据库 到目前为止,我已经: string tableName = "[Table_1]"; string sql = "select * from " + tableName; using (SqlConnection sourceConn = new SqlConnection(ConfigurationManager.Co

我正在尝试在两个数据库之间同步两个表。我认为最好的方法是使用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]);
            }

        }

目前,源中有一行不在目标中。这一排永远不会被转移。我也用一个空的目标试过了,什么都没有转移。

我知道它没有直接回答你的问题,但是你看过了吗


它被设计来做这类事情,并且为你做大部分(如果不是全部的话)的工作。

我知道它并没有直接回答你的问题,但是你看过了吗


它被设计用来做这类事情,并为您完成大部分(如果不是全部的话)工作。

这可能有些过分,但您可以尝试一下这可能有些过分,但您可以尝试在targetDs上使用手表。表[0]显示了正确的数据,但它不会发送到数据库。我不确定InsertCommand等行,但如果没有我的命令,这些命令是空的。嗯,您是否尝试在targetAdapter.Update()方法之前添加targetDs.AcceptChanges()?是的,这也不起作用。targetDs.Tables[0]上的监视显示了正确的数据,但它不会发送到数据库。我不确定InsertCommand等行,但是如果没有我的命令,命令是空的。嗯,您是否尝试过在targetAdapter.Update()方法之前添加targetDs.AcceptChanges()?是的,这也不起作用。我现在正在查看。据我所见,它不是非常轻@Craig-我不是想说它适用于所有情况,但是有600个表需要同步,这可能比手动操作更好。我现在正在考虑这个问题。据我所见,它不是非常轻@Craig-我并不是想说它适用于所有情况,但有600张表需要同步,这可能比手动操作更好。