C# 这是以编程方式在两个数据库之间同步数据的唯一好方法吗
我有两个相同的数据库。一个在生产环境中,另一个在本地环境中。我正在尝试编写c#windows服务,以便不时将生产环境中的数据同步到本地数据库。 下面是我的数据同步服务的代码片段C# 这是以编程方式在两个数据库之间同步数据的唯一好方法吗,c#,asp.net,mysql,windows-services,sync,C#,Asp.net,Mysql,Windows Services,Sync,我有两个相同的数据库。一个在生产环境中,另一个在本地环境中。我正在尝试编写c#windows服务,以便不时将生产环境中的数据同步到本地数据库。 下面是我的数据同步服务的代码片段 private static bool StartDataSync(string tableName, string connectionStringLive, string connectionStringLocal,string databaseName) { bool status = f
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。 这是惊人的,允许您以一种或两种方式同步两个数据库 我们在作业中使用它,因为一旦您设置了表,它就会像 魅力。快速有效 您可以在此处查看mor信息:
您还可以使用mysqldump创建一个脚本,从prod转储数据并将其恢复到本地副本。它可能会更快,更不容易出错。然后你可以安排脚本在你想要的任何时间间隔运行。我在windows而不是linux中。即使每次我创建一个mysql转储,我也必须复制整个数据库,但实际上并不需要dat。我每次都会获取插入本地数据库的最大id,并从生产服务器获取id大于该最大id的数据Id.Dat避免复制