Wie soll ich mehrere Datensätze einfügen?

Ich habe eine Klasse mit dem NamenEntry wie folgt deklariert:

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

und dann eine Methode, die mehrere solche @ akzeptieEntry Objekte zum Einfügen in die Datenbank mit 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
        ...
    }
}  

Und meine Frage lautet: Soll ich weiterhin die oben beschriebene Methode zum Senden mehrerer Einfügeanweisungen verwenden (eine riesige Folge von Einfügeanweisungen und deren Parameter erstellen und über das Netzwerk senden) oder eine offene Verbindung beibehalten und eine einzelne Einfügung senden Anweisung für jedesEntry so was

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();
        }
    }
 }  

Was denkst du? Wird es im SQL Server einen Leistungsunterschied zwischen den beiden geben? Gibt es noch andere Konsequenzen, die ich beachten sollte?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage