2

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

        }

目前,源中有一行不在目标中。该行永远不会被转移。我也用一个空的目标试过它,没有任何东西被转移。

4

2 回答 2

0

我知道它没有直接回答您的问题,但是您看过Microsoft Sync Framework吗?

它旨在完成此类事情,并为您完成大部分(如果不是全部)驴工作。

于 2010-04-19T13:40:43.890 回答
0

这可能有点矫枉过正,但您可以尝试Microsoft 的 Sync Framework

于 2010-04-19T13:41:24.940 回答