由于服务器需要为每个数据库建立连接,因此我在SO中找到的答案根本不起作用。
对于某些表,我必须在复制行之前进行一些计算,但是有些表可以复制整个表。最后,这是我编写的程序中的自动化程序。
Oldcn是到旧数据库的连接,Newcn是新数据库的连接。
对于可以完整复制的表,我在下面编写了此过程。
有没有更好的捷径来完成这项工作? (它在背景上工作)
private string[] CopyTva(MySqlConnection Oldcn, MySqlConnection Newcn, string[] res, DoWorkEventArgs we,string msg)
{
int counter = int.Parse(res[1]);
MySqlCommand cmd = new MySqlCommand("SELECT * FROM tvaval", Oldcn);
MySqlCommand cmd1 = new MySqlCommand("INSERT INTO tvaval (id,tvavalue,cr_user,cr_date,up_user,up_date) VALUES (@id,@tvavalue,@cr_user,@cr_date,@up_user,@up_date)", Newcn);
MySqlDataReader rd = null;
try
{
rd = cmd.ExecuteReader();
while (rd.Read())
{
cmd1.Parameters.AddWithValue("@id", rd["id"].ToString());
//bla bla same as above
try
{
cmd1.ExecuteNonQuery();
}
catch (MySqlException e)
{
rd.Dispose();
res[2] = "Erreur:TVA " + e.Message.ToString();
return res;
}
++counter;
bgw.ReportProgress((counter * 100) / DbTotalRow,msg);
cmd1.Parameters.Clear();
}
rd.Dispose();
}
catch (MySqlException e)
{
res[2] = "Erreur:TVA " + e.Message.ToString();
return res;
}
res[0] = "1";res[1] = counter.ToString();res[2] = "";
return res;
}
最佳答案
MySQL不需要为每个数据库建立单独的连接。连接具有默认数据库,但是允许您在表名称之前显式指定数据库名称,这将覆盖默认名称。因此,您可以使用单个查询来执行此操作:
INSERT INTO newdb.tvaval
SELECT * FROM olddb.tvaval
关于c# - 将表从一个数据库复制到同一服务器上的另一个数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35636017/