gpt4 book ai didi

c# - 这是以编程方式在 2 个数据库之间同步数据的唯一且好的方法吗

转载 作者:行者123 更新时间:2023-11-29 06:55:00 25 4
gpt4 key购买 nike

我有 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;
}

我不知道这是否是执行此操作的唯一方法,或者这是否会在将来引起任何其他问题。如果有人可以建议任何其他方法来执行此操作,我们将不胜感激。

最佳答案

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

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

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

Microsoft Sync Framework Database Synchronization

MIcrosoft Sync Framework Developer Center

关于c# - 这是以编程方式在 2 个数据库之间同步数据的唯一且好的方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com