Как мне несколько раз вставить несколько записей?

У меня есть класс с именемEntry объявлено так:

class Entry{
    string Id {get;set;}
    string Name {get;set;}
}  

а затем метод, который будет принимать несколько такихEntry объекты для вставки в базу данных с помощью ADO.NET:

static void InsertEntries(IEnumerable<Entry> entries){
    //build a SqlCommand object
    using(SqlCommand cmd = new SqlCommand()){
        ...
        const string refcmdText = "INSERT INTO Entries (id, name) VALUES (@id{0},@name{0});";
        int count = 0;
        string query = string.Empty;
        //build a large query
        foreach(var entry in entries){
            query += string.Format(refcmdText, count);
            cmd.Parameters.AddWithValue(string.Format("@id{0}",count), entry.Id);
            cmd.Parameters.AddWithValue(string.Format("@name{0}",count), entry.Name);
            count++;
        }
        cmd.CommandText=query;
        //and then execute the command
        ...
    }
}  

И мой вопрос заключается в следующем: должен ли я продолжать использовать вышеописанный способ отправки нескольких операторов вставки (создать гигантскую строку операторов вставки и их параметров и отправить их по сети), или мне следует сохранить открытое соединение и отправить одну инструкцию вставки для каждогоEntry как это:

using(SqlCommand cmd = new SqlCommand(){
    using(SqlConnection conn = new SqlConnection(){
        //assign connection string and open connection
        ...
        cmd.Connection = conn;
        foreach(var entry in entries){
            cmd.CommandText= "INSERT INTO Entries (id, name) VALUES (@id,@name);";
            cmd.Parameters.AddWithValue("@id", entry.Id);
            cmd.Parameters.AddWithValue("@name", entry.Name);
            cmd.ExecuteNonQuery();
        }
    }
 }  

Как вы думаете? Будет ли разница в производительности на сервере Sql между двумя? Есть ли какие-либо другие последствия, о которых я должен знать?

Ответы на вопрос(8)

Ваш ответ на вопрос