2016-01-16 5 views
0

У меня есть хранимая процедура, которая выглядит следующим образом:MySQL хранимые процедуры основная вставка

InsertItem: INSERT INTO (IN itemId INT, name TEXT); 

Есть ли способ, которым я мог бы выполнить большую часть этого? как вместо выполнения что-то вроде этого:

using (MySqlConnection connection = new MySqlConnection(_connectionString)) 
{ 
    connection.Open(); 
    foreach (Item item in GetItems()) 
    { 
     using (MySqlCommand command = new MySqlCommand("InsertItem", connection)) 
     { 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.AddWithValue("@itemId", item.ItemId); 
      command.Parameters.AddWithValue("@name", item.Name); 
      command.ExecuteNonQuery(); 
     } 
    } 
} 

Я пытаюсь достичь кода, глядя, как, что без successing:

using (MySqlConnection connection = new MySqlConnection(_connectionString)) 
{ 
    connection.Open(); 
    using (MySqlCommandBulk command = new MySqlCommand("InsertItem", connection)) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     for (Item item in GetItems()) 
     { 
      MySqlCommandBulkItem bulkItem = new MySqlCommandBulkItem(); 
      bulkItem["itemId"] = item.ItemId; 
      bulkItem["name"] = item.Name; 
      command.BulkItems.Add(bulkItem); 
     } 
     command.Execute(); 
    } 
} 

Я считаю, что команда будет посылать все данные сразу , и не будет отправлять каждый запрос в одиночку.
Любые идеи?

+0

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

ответ

0

Разъем Oracle для структуры Dotnet позволяет использовать массивы вместо скаляров по параметрам. Но соединитель MySQL этого не делает.

Существует два способа ускорения массовых нагрузок в MySQL.

Один из них относится к таблицам InnoDB, но не помогает в таблицах MyISAM. Запустите транзакцию. Затем, после каждых нескольких сотен строк, COMMIT его и запустите еще один. Это приведет к тому, что ваши таблицы будут вставляться в пучки, что быстрее, чем автоматическое их объединение.

Другой способ заключается в использовании команды LOAD DATA INFILE MySQL для разметки файла данных и массового ввода его в базу данных. Это очень быстро, но вы должны быть осторожны в правильном форматировании файла.

Смежные вопросы