J'ai une classe nommée Entry
déclarée comme ceci:Comment devrais-je insérer plusieurs enregistrements multiples?
class Entry{
string Id {get;set;}
string Name {get;set;}
}
et une méthode qui accepte plusieurs objets tels Entry
pour l'insertion dans la base de données en utilisant 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
...
}
}
Et ma question est-ce que je devrais continuer à employer la manière ci-dessus d'envoyer plusieurs instructions d'insertion (construisez une chaîne géante d'instructions d'insertion et leurs paramètres et envoyez-le sur le réseau) ou dois-je garder une connexion ouverte et envoyer une instruction d'insertion pour chaque Entry
comme ceci:
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();
}
}
}
Qu'en pensez-vous? Y aura-t-il une différence de performance dans le serveur Sql entre les deux? Y a-t-il d'autres conséquences dont je devrais être conscient?
Merci pour toutes vos suggestions! je vais prendre la réponse de @ Giorgi car elle répond plus ou moins à la question originale – bottlenecked
vous pouvez utiliser le type de table défini par l'utilisateur dans le serveur SQl pour passer DataTable au serveur SQL http://www.fourthbottle.com/2014/09/how- to-insert-multiple-records-into.html – Venki