2015-06-30 26 views
3

我使用以下代碼:多重插入使用的MySqlCommand

 string cmd = "INSERT INTO " + Tables.Lux() + " VALUES(NULL, @Position, @Mode, @Timer)"; 
     try 
     { 
      using (var MyConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["DataFormConnection"].ConnectionString)) 
      { 
       using (MySqlCommand command = new MySqlCommand(cmd, MyConnection)) 
       { 
        MyConnection.Open(); 
        command.Parameters.Add(new MySqlParameter("Position", Element.Position)); 
        command.Parameters.Add(new MySqlParameter("Mode", Element.Mode)); 
        command.Parameters.Add(new MySqlParameter("Timer", Element.Timer)); 
        command.ExecuteNonQuery(); 
       } 
      } 
     } 

我使用上面的代碼從含有100個項目元素的列表插入數據。我想只有一個查詢添加100個值,我知道,SQL語句類似於:

INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 

,但我不知道如何使用MySqlCommand.Parameters方法來應用結構。

我的目標是通過此函數List<Element>而不是僅僅Element並創建一個INSERT語句,列表中的所有項目僅在一個查詢中執行。請幫忙嗎?

謝謝。

+0

值是否來自另一個SQL表? –

+0

您可以創建一個存儲過程調用一次,然後在這裏執行您的插入語句,如果您從另一個表插入,則可以使用此表生成將要插入的數據。 –

+1

您的問題的答案在您的帖子/代碼中。你只需要添加參數而不是值。稍後,您可以在調用ExecuteNonQuery()方法之前替換參數值。 – adatapost

回答

4

試試這樣說:

string cmd = "INSERT INTO " + Tables.Lux() + " VALUES "; 
int counter = 0; 

foreach (Element e in list) 
{ 
    sql += "(NULL, @Position" + counter + ", @Mode" + counter + ", @Timer" + counter + "),"; 
    command.Parameters.Add(new MySqlParameter("Position" + counter, e.Position)); 
    command.Parameters.Add(new MySqlParameter("Mode" + counter, e.Mode)); 
    command.Parameters.Add(new MySqlParameter("Timer" + counter, e.Timer)); 
    counter++; 
} 

command.CommandText = sql.Substring(0, sql.Length-1); //Remove ',' at the end 

這樣你就可以有一個可變數量的參數在您的查詢,你只需要對數據庫一旦啓動它,而不是N次

這是未經測試,只是我的頭!

+0

@Hamma請在評論中討論,而不是編輯帖子A和B是你的參數名稱的佔位符,sry我沒有在前面用'@'寫下它們 – Xenogenesis

+0

好吧,它現在有意義。對不起編輯,我試圖評論,但編寫代碼看起來很雜亂,我認爲它會更容易閱讀其他方式。 我會試試這個,謝謝! – Hamma

+0

沒問題,我希望它可以幫助你 – Xenogenesis