将表从一个数据库复制到同一服务器上的另一个数据库

问题描述:

由于服务器需要每个数据库的连接,因此我在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; 
    } 
+0

你什么时候处置剩余的2'MySqlCommand'对象..尝试包裹周围的人一个'使用(){}' – MethodMan

+0

我有一个读取和处理是在while循环中。由于连接在整个传输期间是打开的,因此我没有在这里使用声明。但我知道这是一个很好的解决方案。谢谢 –

+0

你知道自动处理没有发生在sql对象上。 – MethodMan

MySQL不需要为每个数据库单独连接。连接有一个默认数据库,但您可以在表名前明确指定数据库名称,这将覆盖默认值。所以,你可以使用单个查询做到这一点:

INSERT INTO newdb.tvaval 
SELECT * FROM olddb.tvaval 
+0

如何配置这个? 使用(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' 因为我试图插入另一个数据库而没有实现连接。如果我在本地做同样的工作。 –

+0

您需要在新DB中为'bodrum2015 @ x.x.x.x'授予'INSERT'权限。 – Barmar

+0

您是否使用不同的连接,因为它们对每个数据库都有不同的用户名信息? – Barmar