2016-02-25 81 views
0

由於服務器需要每個數據庫的連接,因此我在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

回答

0

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

相關問題