由於服務器需要每個數據庫的連接,因此我在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;
}
你什麼時候處置剩餘的2'MySqlCommand'對象..嘗試包裹周圍的人一個'使用(){}' – MethodMan
我有一個讀取和處理是在while循環中。由於連接在整個傳輸期間是打開的,因此我沒有在這裏使用聲明。但我知道這是一個很好的解決方案。謝謝 –
你知道自動處理沒有發生在sql對象上。 – MethodMan