Forzar el cierre efectivo de la conexion

19/07/2005 - 12:08 por Baldor | Informe spam
Sucede que cuando ejecuto un proyecto .NET Winforms que abre un objeto
connection contra una BD SQLServer, aunque solo sea para consultas, una vez
que la aplicación finaliza, cerrando completamente todos los commands,
adapters, connection, etc, sin embargo algun proceso queda abierto, porque
cuando si intentamos hacer una restauración de la BD mediante un backup, nos
salta el error de que la BD esta en uso, y hasta pasados unos minutos con
todos los programas cerrados, será imposible hacer una RESTORE en la BD.

¿Alguien sabe como se puede evitar esto????

Preguntas similare

Leer las respuestas

#1 A.Poblacion
19/07/2005 - 12:58 | Informe spam
"Baldor" wrote in message
news:%239z%
Sucede que cuando ejecuto un proyecto .NET Winforms que abre un objeto
connection contra una BD SQLServer, aunque solo sea para consultas, una


vez
que la aplicación finaliza, cerrando completamente todos los commands,
adapters, connection, etc, sin embargo algun proceso queda abierto, porque
cuando si intentamos hacer una restauración de la BD mediante un backup,


nos
salta el error de que la BD esta en uso, y hasta pasados unos minutos con
todos los programas cerrados, será imposible hacer una RESTORE en la BD.

¿Alguien sabe como se puede evitar esto????



Lo que ocurre es que cuando la haces un Close al SqlConnection, no se
cierra la conexión, sino que se devuelve al pool, y el pool la conserva
abierta para devolvértela tal como está la siguiente vez que hagas un Open.

Si quieres que se cierre de verdad, prueba a añadirle Pooling=false en
la cadena de conexión.
Respuesta Responder a este mensaje
#2 Baldor
19/07/2005 - 15:02 | Informe spam
Gracias por la respuesta.
Bien, seguramente el Pooling es el problema. Si suponemos que asi es:

Abro una conexión usando Pooling (o sea, sin especificar el argumento
Pooling en la cadena de conexion)
Cierro la conexion
Esto significa que al usar pooling, la conexión no se ha cerrado realmente.

Ahora quiero hacer un "restore backup". ¿Como puedo hacer que esa conexión
que está en el pooling se cierre?
Había pensado en volver a abrir la conexión con Pooling=false, cerrarla, y
después hacer el restore, pero no funciona.




"A.Poblacion" escribió en
el mensaje news:
"Baldor" wrote in message
news:%239z%
Sucede que cuando ejecuto un proyecto .NET Winforms que abre un objeto
connection contra una BD SQLServer, aunque solo sea para consultas, una


vez
que la aplicación finaliza, cerrando completamente todos los commands,
adapters, connection, etc, sin embargo algun proceso queda abierto,
porque
cuando si intentamos hacer una restauración de la BD mediante un backup,


nos
salta el error de que la BD esta en uso, y hasta pasados unos minutos con
todos los programas cerrados, será imposible hacer una RESTORE en la BD.

¿Alguien sabe como se puede evitar esto????



Lo que ocurre es que cuando la haces un Close al SqlConnection, no se
cierra la conexión, sino que se devuelve al pool, y el pool la conserva
abierta para devolvértela tal como está la siguiente vez que hagas un
Open.

Si quieres que se cierre de verdad, prueba a añadirle Pooling=false en
la cadena de conexión.


Respuesta Responder a este mensaje
#3 A.Poblacion
19/07/2005 - 21:44 | Informe spam
"Baldor" wrote in message
news:
Gracias por la respuesta.
Bien, seguramente el Pooling es el problema. Si suponemos que asi es:

Abro una conexión usando Pooling (o sea, sin especificar el argumento
Pooling en la cadena de conexion)
Cierro la conexion
Esto significa que al usar pooling, la conexión no se ha cerrado


realmente.

Ahora quiero hacer un "restore backup". ¿Como puedo hacer que esa conexión
que está en el pooling se cierre?
Había pensado en volver a abrir la conexión con Pooling=false, cerrarla, y
después hacer el restore, pero no funciona.



Se me ocurre una chapuza tremenda, pero nunca he probado si funciona:
Vuelves a abrir la conexión, con lo que te la recupera del pool. Haces
un "SELECT @@SPID" y te guardas el SPID que te devuelve. Cierras la conexión
(vuelve al pool). Abres otra conexión nueva sobre master. Desde esta
conexión ejecutas un "KILL xx" para matar la otra conexión (xx es el spid de
la conexion). A continuación haces ya el restore backup.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida