1

私は2つの同じデータベースを持っています.1つは本番環境にあり、もう1つはローカルにあります.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

2人でMicrosoftSyncFrameworkを使用することをお勧めします。これは驚くべきことであり、1つの方法または両方で2つの同期データベースを使用できます。

テーブルをプロビジョニングすると、チャームのように機能するため、仕事で使用します。速くて効果的

あなたはmor情報のためにここでチェックすることができます:

MicrosoftSyncFrameworkデータベースの同期

MIcrosoftSyncFramework開発者センター

于 2012-11-08T15:18:41.527 に答える