MultipleActiveResultSets = ¿Verdadero o múltiples conexiones?

85

Tengo algo de C # en el que creo un lector en una conexión ( ExecuteReader), luego, para cada fila en ese lector, realizo otro comando (con ExecuteNonQuery). En este caso, ¿es mejor utilizar MultipleActiveResultSets=Trueen mi conexión o utilizar varias conexiones?

Sprintstar
fuente

Respuestas:

98

Se agregaron varios conjuntos de resultados activos (MARS) específicamente para este tipo de operación para que no tenga que tener dos conexiones abiertas al mismo tiempo para poder leer desde un SqlDataReader Y ejecutar lotes adicionales.

MARS es compatible con SQL Server 2005 y versiones posteriores. Para citar documentos de MSDN:

Antes de la introducción de múltiples conjuntos de resultados activos (MARS), los desarrolladores tenían que usar múltiples conexiones o cursores del lado del servidor para resolver ciertos escenarios.

Para obtener más información, consulte:

Biblioteca MSDN: descripción general de MARS

Ejemplo resuelto de lectura y actualización de datos:

Biblioteca MSDN: manipulación de datos (MARS), desplácese hacia abajo hasta 'Lectura y actualización de datos con MARS'

Kev
fuente
21

Hasta donde yo sé, esta es la razón por la que se agregó MARS, así que sí, creo que deberías usarlo.

Runa Grimstad
fuente
0

La mejor manera de probar esto es activar SQLServer Profiler y ver qué sucede realmente en el lado del servidor.

Supongo que no será mejor ya que está utilizando ExecuteNonQuery (). Entonces, de hecho, no trabaja con múltiples resultados.

dmajkic
fuente
6
Eso es lo que pensé cuando escribí el código, pero si no tengo MultipleActiveResultSets = True, todavía obtengo un "Ya hay un DataReader abierto asociado con este comando que debe cerrarse primero". excepción en ExecuteNonQuery.
Sprintstar