2009-06-09 8 views
5

L'utilisation des fonctions d'insertion par lots du .NET DataAdapter est-elle plus efficace, en ce qui concerne les allers-retours DB, que l'utilisation de DbCommand.ExecuteNonQuery() dans une boucle? Venant du monde Java, j'espérais trouver quelque chose de similaire à ses capacités batch où plusieurs commandes SQL sont envoyées à la base de données et exécutées en une seule opération. Lors de la surveillance du serveur de base de données, je vois le DataAdapter en faisant une exécution par insertion.Insertions SQL par lots dans .NET

J'ai lu quelques sujets qui utilisent le SqlBulkCopy, mais cela ne fonctionnera que pour MS Sql Server.

Merci!

Répondre

5

Le DataAdapter a une propriété UpdateBatchSize. Si vous définissez UpdateBatchSize sur une valeur entière positive, les mises à jour de la base de données sont envoyées en tant que lots de la taille spécifiée.

Hope this helps ...

+0

Il s'agit du seul niveau prenant en charge le traitement par lots de commandes. Vous ne pouvez pas lotir vos propres DbCommands (sans exposer certaines classes internes avec Reflection). –

+0

J'ai essayé ça. Sur MS SQL Server, SQL Profiler montre que chaque instruction d'insertion semble être indépendante. Après avoir examiné votre commentaire, j'ai vu un TCP Dump de la conversation et je vois qu'il est en train de grouper plusieurs commandes ensemble. SQL Profiler affiche chaque insertion en tant qu'événement "RPC Completed" qui me déroutait. Merci de votre aide. –

0

Qu'en est-: une instruction sur plusieurs lignes

mysql: 
INSERT INTO table (id) VALUES (1), (2), (3) 

mssql: 
INSERT INTO table (id) 
SELECT 1 
UNION ALL 
SELECT 2 
UNION ALL 
SELECT 3 
+0

Je craignais que cette (chaîne concatting pour compenser les instructions d'insertion) me ouvrir à injection sql, donc j'utilisait l'objet de commande et les paramètres d'entrée propre. Sinon, je pourrais faire plusieurs tables d'INSERT VALUES() terminées par un ';' ou comme vous l'avez suggéré. Merci pour cette suggestion! –

+0

Si vous l'utilisez dans le cadre d'une application web, vous ne devriez pas l'utiliser. La plupart du temps, ces opérations par lots. sont utilisés dans les mises à jour de DB et des trucs comme ça. – albertjan

Questions connexes