none
Cierre conexion VB.NET - SQL SERVER RRS feed

  • Pregunta

  • Hola,

    Tengo la siguiente duda.

    Cuando realizo una conexión a un servidor SQL Server a traves de VB.NET, en el servidor SQL se genera un inicio de sesión. El problema que tengo es que después de realizar una serie de acciones cierro la conexión de esta forma:

     cn.Dispose()
     cn.Close()

    Y la sesión en el SQL sigue abierta y hasta que no cierro la aplicación no desaparece.

    Utilizo System.Data.SqlClient

    Muchas gracias,


    Víctor Montes Cabanillas Developer
    • Cambiado Enrique M. Montejo viernes, 3 de noviembre de 2017 7:06 Pregunta relacionada con objetos de acceso a datos.
    viernes, 30 de diciembre de 2011 8:28

Respuestas

  • Hola Victor,

     

    Para evitar utilizar cn.Dispose y cn.Close, has evaluado utilizar using?

    using cn as new SqlConnection
    
    'tus acciones
    
    end using


    cuando se sale del end using se hace el connection.close y el .dispose.

    Por otro lado, que las conexiones se queden en la BD hasta que cierras la aplicación, creo que, se debe al ConnectionPool, prueba lo siguiente:

    Invoca al metódo estático (shared) ClearAllPools de la clase SqlConnection:

    Después de hacer el close de tu conexión o después del end using que te indicaba yo pon está linea:

    SqlConnection.ClearAllPools()

     

    Un saludo y Feliz Año!


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    viernes, 30 de diciembre de 2011 8:37
    Moderador

Todas las respuestas

  • Hola Victor,

     

    Para evitar utilizar cn.Dispose y cn.Close, has evaluado utilizar using?

    using cn as new SqlConnection
    
    'tus acciones
    
    end using


    cuando se sale del end using se hace el connection.close y el .dispose.

    Por otro lado, que las conexiones se queden en la BD hasta que cierras la aplicación, creo que, se debe al ConnectionPool, prueba lo siguiente:

    Invoca al metódo estático (shared) ClearAllPools de la clase SqlConnection:

    Después de hacer el close de tu conexión o después del end using que te indicaba yo pon está linea:

    SqlConnection.ClearAllPools()

     

    Un saludo y Feliz Año!


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    viernes, 30 de diciembre de 2011 8:37
    Moderador
  • Hola,

    Despúes del cn.close() he puesto la siguiente línea:

    SqlConnection.ClearAllPools()

    Y revisando el servidor SQL Server me ha liberado la sesión.

    Ahora mi pregunta es la siguiente. Esto lo hago porque SQL Server tiene un límete de conexiones por sesión, como en este caso el número de acciones que tengo que realizar son muchas, entiendo que con esto se solucionará ¿no?


    Víctor Montes Cabanillas Developer
    viernes, 30 de diciembre de 2011 8:48
  • En principio si,

    ¿Para cada acción que tienes que hacer, abres y cierras la sesión?


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    viernes, 30 de diciembre de 2011 8:49
    Moderador
  • Ahora si que lo hago con SqlConnection.ClearAllPools(), antes no y por eso me daba problemas y me generaba un error.

    Lo que si he observado, es que aunque libero la sesión, cuando la vuelvo a abrir me sigue dando el mismo ID de sesión, entiendo que esto no será ningún problema, ¿no?

    Muchas gracias,


    Víctor Montes Cabanillas Developer
    viernes, 30 de diciembre de 2011 8:56
  • En principio no deberías de tener ningun problema.


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    viernes, 30 de diciembre de 2011 9:04
    Moderador
  • Ok!! Javier,

    Muchas gracias por todo y FELIZ AÑO!!


    Víctor Montes Cabanillas Developer
    viernes, 30 de diciembre de 2011 9:07
  • Buenas noches,

    tuve el mismo problema, uso el close para cerrar la conexion,

    si bien la conexion en la aplicación se cierra, en el servidor se mantenia abierta.

    Con el clearpools, se libero del servidor y asunto arreglado !!!

    Gracias por el dato !!!

    sábado, 6 de junio de 2015 4:30