将表从一个数据库复制到同一服务器上的另一个数据库
由于服务器需要每个数据库的连接,因此我在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
如何配置这个? 使用(MySqlCommand cmd = new MySqlCommand(“INSERT INTO”+ NewDbName +“。”+ tblName +“SELECT * FROM”+ Pv.DbName +“。”+ tblName,Oldcn)) 当我尝试此查询时,这个MySqlException:{MySql.Data.MySqlClient.MySqlException:INSERT命令被拒绝给用户'bodrum2015'''XX.XXX.XX.XX'表'def_firme' 因为我试图插入另一个数据库而没有实现连接。如果我在本地做同样的工作。 –
您需要在新DB中为'bodrum2015 @ x.x.x.x'授予'INSERT'权限。 – Barmar
您是否使用不同的连接,因为它们对每个数据库都有不同的用户名信息? – Barmar
你什么时候处置剩余的2'MySqlCommand'对象..尝试包裹周围的人一个'使用(){}' – MethodMan
我有一个读取和处理是在while循环中。由于连接在整个传输期间是打开的,因此我没有在这里使用声明。但我知道这是一个很好的解决方案。谢谢 –
你知道自动处理没有发生在sql对象上。 – MethodMan