threads y storeds

31/10/2006 - 11:27 por Juanma | Informe spam
Hola,

Tengo un problema con una aplicacion .net que se conecta a una bbdd
SqlServer. La aplicacion esta programada con Threads, (hilos de ejecucion),
por lo que en un mismo segundo puede ejecutar varias storeds/procedures. A
la vez nos podemos encontrar con que otros usuarios pueden estar ejecutando
vistas y consultas a otras tablas.

Mi duda es, si existe algun metodo para darle prioridad de ejecucion a una
stored sobre las demas peticiones a la bbdd. Creo recordar que existia una
instruccion para bloquear la bbdd mientras se ejecutaba un bloque de codigo.

El error que normalmente me sale es:
There is already an open DataReader associated with this Command which must
be closed first.


Alguien puede ayudarme?

Gracias
 

Leer las respuestas

#1 Alberto Poblacion [MVP]
31/10/2006 - 11:42 | Informe spam
"Juanma" wrote in message
news:OdpVwcN$
Tengo un problema con una aplicacion .net que se conecta a una bbdd
SqlServer. La aplicacion esta programada con Threads,
[...]
El error que normalmente me sale es:
There is already an open DataReader associated with this Command which
must be closed first.



El problema se debe, probablemente, a que estás usando la misma conexión
desde múltiples hilos, con lo que te da un error cuando se produce la
coincidencia de que uno de los hilos intenta usar la conexión en el momento
en que otro hilo tiene abierto un DataReader sobre la misma conexión, ya que
el DataReader "ocupa" la conexión y no deja usarla para nada más.

El remedio más simple es usar una conexión distinta para cada hilo.

Como alternativa, si el Sql Server es la versión 2005, y en el cliente
tienes el Native Client (es decir, la versión del cliente Sql que viene con
el Sql Server 2005), entonces podrías probar a usar el MARS (Multiple Active
Result Sets), que permite enviar varios comandos por una misma conexión
aunque esté siendo usada por un DataReader. Para eso tienes que activar MARS
en la cadena de conexión:
Dim connectionString As String = "Data Source=MSSQL1;" & _
"Initial Catalog=AdventureWorks;Integrated Security=SSPI" & _
"MultipleActiveResultSets=True"

Preguntas similares