2014-02-16 28 views
0

我試圖製作一個程序,將數據從一個表複製到其他服務器中的另一個表。使用C#上的參數從一個數據庫複製另一個數據庫中的行#

事情是表是不完全一樣的。所以我們可以說這是我的表:

服務器A: 表A(Col1中,col2的,COL3)

服務器B: 表B(Col1中,col2的)

我想從ServerA.TableA複製到ServerB.TableB。

我的代碼:

Truncate_table(ConnectionB, "TableB"); 

MySqlCommand CmdB = new MySqlCommand("", ConnectionB); 
CmdB.CommandText = "INSERT INTO ServerB.TableB (col1, col2) VALUES (@val1, @val2)"; 

using (MySqlCommand cmd = new MySqlCommand("", ConnectionA)) 
{ 
    cmd.CommandText = "SELECT col2, col3 FROM ServerA.TableA"; 

    using (MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      CmdB.Parameters.AddWithValue("@val1", reader.GetInt32(0)); 
      CmdB.Parameters.AddWithValue("@val2", reader.GetInt32(1)); 
      CmdB.ExecuteNonQuery(); 
     } 

    } 
} 

然而,它給錯誤說 '參數 '@ VAL1' 已被定義。'。

你們能給我一點建議嗎?

是否有更有效的方法來做到這一點?但我想在C#中做到這一點。

回答

1

嘗試添加參數一次,則while -loop內設置這些參數的值:

MySqlCommand CmdB = new MySqlCommand("", ConnectionB); 
CmdB.CommandText = "INSERT INTO ServerB.TableB (col1, col2) VALUES (@val1, @val2)"; 
CmdB.Parameters.AddWithValue("@val1", 0); // Default values 
CmdB.Parameters.AddWithValue("@val2", 0); 

using (MySqlCommand cmd = new MySqlCommand("", ConnectionA)) 
{ 
    cmd.CommandText = "SELECT col2, col3 FROM ServerA.TableA"; 

    using (MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      CmdB.Parameters["@val1"].Value = reader.GetInt32(0)); 
      CmdB.Parameters["@val2"].Value = reader.GetInt32(1)); 
      CmdB.ExecuteNonQuery(); 
     } 

    } 
} 

而且,我可能是錯的,但我相信你需要使用?來劃定界限MySql的參數。如果您有任何其他問題,可以嘗試用?val1?val2替換@val1@val2

0

哦,我只是說

CmdB.Parameters.Clear(); 

CmdB.ExecuteNonQuery(); 
1

您正在逐行處理數據。這是從表格複製到另一個表格的非常低效的方式。您可以使用類似的代碼在數據庫上執行一個INSERT來獲得相同的結果,您只需先讀取要插入的所有行。

相關問題