1

我有 2 个相同的数据库。一个在生产中,另一个在本地。我正在尝试编写 c# windows 服务以不时将数据从生产数据库同步到本地数据库。这是我的数据同步服务的代码片段

 private static bool StartDataSync(string tableName, string connectionStringLive, string connectionStringLocal,string databaseName)
    {
        bool status = false;

        DataSet dsResult = new DataSet();

        Int64 maxId = 0;
        MySqlConnection conLocal = new MySqlConnection(connectionStringLocal);
        MySqlCommand cmdLocal = new MySqlCommand("pr_GetMaxIdFromTable", conLocal);
        cmdLocal.CommandType = CommandType.StoredProcedure;
        MySqlParameter[] parameters = new MySqlParameter[4];
        parameters[0] = new MySqlParameter("vTableName", tableName);
        parameters[0].Direction = ParameterDirection.Input;
        parameters[1] = new MySqlParameter("vMaxId", MySqlType.BigInt);
        parameters[1].Direction = ParameterDirection.Output;
        parameters[2] = new MySqlParameter("vExist", "0");
        parameters[2].Direction = ParameterDirection.InputOutput;
        parameters[3] = new MySqlParameter("vDatabaseName", databaseName);
        parameters[3].Direction = ParameterDirection.Input;

        foreach (MySqlParameter param in parameters)
        {
            cmdLocal.Parameters.Add(param);
        }

        conLocal.Open();
        cmdLocal.ExecuteNonQuery();
        int ifExist = 0;
        ifExist = Convert.ToInt32(parameters[2].Value);
        if (ifExist == 1)
        {

            maxId = Convert.ToInt64(parameters[1].Value);

            MySqlConnection conLive = new MySqlConnection(connectionStringLive);
            MySqlCommand cmdLive = new MySqlCommand("Select * from " + tableName + " where Id>" + maxId, conLive);

            MySqlDataAdapter adp = new MySqlDataAdapter(cmdLive);
            adp.Fill(dsResult);



            MySqlCommand cmdLocalInsert = null;
            string insertValues = string.Empty;
            foreach (DataRow dr in dsResult.Tables[0].Rows)
            {
                insertValues = string.Empty;
                foreach (DataColumn dc in dsResult.Tables[0].Columns)
                {
                    insertValues = insertValues + Convert.ToString(dr[dc]) + ",";
                }
                insertValues = insertValues.Substring(0, insertValues.Length - 1);
                cmdLocalInsert = new MySqlCommand("Insert into " + tableName + " Values(" + insertValues + ")", conLocal);
                if (conLocal.State != ConnectionState.Open)
                {
                    conLocal.Open();
                }
                cmdLocalInsert.ExecuteNonQuery();
            }
        }

        return status;
    }

我不知道这是否是这样做的唯一方法,或者这是否会在将来导致任何其他问题。如果有人可以建议任何其他方法,将不胜感激。

4

1 回答 1

2

我建议你们两个使用Microsoft Sync Framework。令人惊奇的是,它允许您以一种方式或两种方式同步两个数据库。

我们在工作中使用它,因为一旦您配置了表,它就会像魅力一样发挥作用。快速有效

你可以在这里查看更多信息:

Microsoft Sync Framework 数据库同步

微软同步框架开发者中心

于 2012-11-08T15:18:41.527 回答