Pregunta

Sospeché que una conexión de base de datos utilizada en una de nuestras aplicaciones no siempre está cerrada. Fui a ver el código y encontré una clase DataProvider que tiene el objeto SqlConnection . La conexión se abre en el constructor de esta clase y se cierra en su método Dispose (no juzgue eso, sé que mantener una conexión abierta es malo, simplemente no es mi código y no es el punto de la pregunta de todos modos). El método Dispose se implementa así:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_conn != null)
                _conn.Close();
        }

        _disposed = true;
    }
}

La pregunta es:
¿Siempre garantiza que la conexión está cerrada?
¿Es correcto este código?

Creo que debería llamarse a _conn.Dispose () : ¿estoy en lo cierto y podría afectar no cerrar la conexión (probablemente no)?

¿Fue útil?

Solución

Dispose nunca se llama automáticamente.

La conexión no se cerrará hasta que se llame explícitamente al método Dispose de su objeto, o si su clase se usa en un bloque using ()

Una forma más segura es llamar al método de eliminación en su finalizador y asegurarse de que el finalizador se suprima cuando se llama al método de eliminación.

Este artículo presenta la forma correcta de implementar el patrón

¡Espero que ayude!

C & # 233; dric

Otros consejos

conn.Dispose (); también cerrará la conexión, por lo que no puede hacer daño cambiarla para seguir el patrón de disposición.

Pero hay funcionalmente equivalente, por lo que debe haber un problema en otro lugar.

http://msdn.microsoft .com / es-us / library / system.data.sqlclient.sqlconnection.close.aspx

  

Si SqlConnection sale de   alcance, no se cerrará. Por lo tanto,   debes cerrar explícitamente   conexión llamando a Cerrar o   Disponer. Cerrar y desechar son   Funcionalmente equivalente. Si el   valor de agrupación de conexiones La agrupación es   establecido en verdadero o sí, el subyacente   la conexión se devuelve a la   Piscina de conexión. Por otro lado, si   La agrupación se establece en falso o no, el   la conexión subyacente al servidor es   cerrado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top