2015-06-30 3 views
3

Я использую следующий код:Multiple INSERT в одном запросе с помощью 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

Вы можете создать вызов хранимой процедуры один раз, а затем здесь сделать инструкцию insert, если вы вставляете из другой таблицы, вы можете использовать эту таблицу для генерации ваших данных, которые будут вставлены. –

+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 

Таким образом, вы можете иметь переменное число параметров в запросе, и вы только должны стрелять один раз в базе данных, а не п раз

Это непроверенный, просто из головы!

+0

@Hamma Пожалуйста, обсудите в комментариях, а не редактируя Posts A и B - заполнители для ваших имен параметров, sry Я не писал их с '@' впереди – Xenogenesis

+0

Хорошо, теперь это имеет смысл. Извините за редактирование, я пытался прокомментировать, но написание кода выглядело настолько грязным, что я подумал, что было бы гораздо проще читать по-другому. Я попробую это, спасибо! – Hamma

+0

Без проблем, надеюсь, это поможет вам – Xenogenesis