2009-06-09 26 views
5

¿Está el uso de las características de inserción por lotes de DataAdapter de .NET más eficiente, en lo que respecta a los viajes de ida y vuelta DB, en comparación con el uso de DbCommand.ExecuteNonQuery() en un bucle?Inserciones SQL por lotes en .NET

Viniendo desde el mundo de Java, esperaba encontrar algo similar a sus habilidades por lotes donde se envían múltiples comandos SQL a la base de datos y se ejecutan en una sola operación. Al monitorear el servidor de la base de datos, veo el DataAdapter haciendo que uno se ejecute por inserción.

He leído algunos temas que usan SqlBulkCopy pero eso solo funcionará para el servidor MS Sql.

Gracias!

Respuesta

5

El adaptador de datos tiene una propiedad UpdateBatchSize. Al establecer UpdateBatchSize en un valor entero positivo, las actualizaciones de la base de datos se envían como lotes del tamaño especificado.

Espero que esto ayude ...

+0

Este es el único nivel que admite el procesamiento por lotes de comandos. No puede agrupar sus propios DbCommands (sin exponer algunas clases internas con Reflection). –

+0

He intentado esto. En MS SQL Server, SQL Profiler muestra que cada instrucción de inserción parece ser independiente. Después de revisar su comentario, vi un volcado TCP de la conversación y veo que está agrupando varios comandos juntos. El Analizador de SQL muestra cada inserción como un evento "RPC Completado" que me confundía. Gracias por tu ayuda. –

0

¿Qué hay de: Una sentencia varias filas

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

que estaba preocupado de que este (cadena concatting para compensar las instrucciones de inserción) que me abrirse a la inyección SQL, así que estaba usando el objeto de comando y los parámetros de entrada para limpiar. De lo contrario, podría hacer varios VALORES de la tabla INSERT() terminados por un ';' o como lo había sugerido ¡Gracias por la sugerencia! –

+0

Si estás usando esto como parte de una aplicación web, entonces no deberías usarla. La mayoría de las veces estas operaciones por lotes. se usan en actualizaciones de db y cosas así. – albertjan

Cuestiones relacionadas