Envoi de plusieurs commandes SQL en une seule transaction
J'ai une liste énorme de INSERT INTO ...
cordes. Actuellement, je les exécuter avec:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
foreach (var commandString in sqlCommandList)
{
SqlCommand command = new SqlCommand(commandString, connection);
command.ExecuteNonQuery();
}
}
Je vois que chaque ExecuteNonQuery()
est également responsable de la commettre.
- Est-il un moyen d'insérer toutes les lignes en une seule transaction (commit à la fin)?
- La raison pour laquelle je tiens une seule opération est de faire mon "inserts" processus plus rapide. Une seule opération aussi de le rendre plus rapide?
source d'informationauteur Bick
Vous devez vous connecter pour publier un commentaire.
Ses recommandé d'utiliser des transactions SQL dans le cas où vous êtes l'exécution de Plusieurs requêtes dans un thread , vous pouvez le faire comme ceci :
Vous pourriez probablement gain de performance par l'utilisation d'une seule transaction et de la commande, comme suit:
Un peu tard, mais si vous êtes de l'insertion de toutes les valeurs dans le même tableau, code SQL insert "insert into tablex (f1, f2, f3,...) values (@F1@F2@F3...)". Créer la commande et ajouter les paramètres @F1... et puis définissez la préparation du drapeau sur la commande. Maintenant que vous parcourez votre liste de valeurs à insérer, vous pouvez les définir dans les paramètres appropriés, puis de ne le ExecuteNonQuery. SQL pré-analyser la chaîne de commande une fois, et ensuite utiliser les nouveaux paramètres à chaque fois. C'est un peu plus rapide.
Enfin, vous pouvez exécuter plusieurs instructions SQL dans une seule et même commande en ajoutant ';' pour chaque énoncé, si vous devez exécuter l'ensemble de la chaîne. Vous pouvez tas un certain nombre de ces commandes ensemble et de faire une demande pour le serveur SQL à exécuter.
Vous pouvez utiliser en Parallèle pour chaque