Как я могу синхронизировать две таблицы данных и обновить цель в базе данных? - PullRequest
2 голосов
/ 19 апреля 2010

Я пытаюсь синхронизировать две таблицы между двумя базами данных. Я подумал, что лучший способ сделать это - использовать метод 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]);
            }

        }

В настоящее время в источнике есть одна строка, которой нет в цели. Этот ряд никогда не передается. Я также попробовал это с пустой целью, и ничто не передано.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

Это может быть излишним, но вы можете попробовать Sync Framework от Microsoft

0 голосов
/ 19 апреля 2010

Я знаю, что он не отвечает прямо на ваш вопрос, но вы смотрели на Microsoft Sync Framework ?

Он предназначен для подобных вещей и выполняет большую часть (если не все) осла за вас.

...