sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo mantener abierta una única instancia de conexión de SQL Server para múltiples solicitudes en C#?

SqlConnection de ADO.NET está implementando un grupo de conexiones. Esto significa que cuando cierra o desecha una instancia de SqlConnection , la conexión subyacente simplemente regresa al grupo. Cuando otra instancia de SqlConnection se abre y hay una conexión disponible en el grupo de conexiones, se utilizará esa conexión.
De hecho, la página de documentos de Microsoft en el grupo de conexiones de SQL Server establece claramente:

Precaución
Recomendamos encarecidamente que siempre cierre la conexión cuando termine de usarla para que la conexión vuelva al grupo. Puede hacer esto usando los métodos Cerrar o Dispose del objeto Connection, o abriendo todas las conexiones dentro de una declaración de uso en C#, o una declaración de Uso en Visual Basic. Es posible que las conexiones que no se cierren explícitamente no se agreguen ni se devuelvan al grupo. Para obtener más información, consulte Uso de instrucción o Cómo:desechar un recurso del sistema para Visual Basic.

Esto significa que la forma de mejores prácticas de usar SqlConnection es esto:

using(var con = new SqlConnection(connectionString))
{
    // your sql stuff goes here...
}

Por cierto, SqlCommand , SqlDataReader y SqlDataAdapter también implementa el IDisposable interfaz, por lo que también deben usarse en el contexto de using declaración:

using(var con = new SqlConnection(connectionString))
{
    using(var cmd = new SqlCommand(sql, con))
    {
        // prepare command here - parameters and stuff like that

        // either
        using(var reader = cmd.ExecuteReader())
        {

        }

        // or 
        using(var adapter = new SqlDataAdapter(cmd))
        {

        }

    }
}