Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como manter uma única instância de conexão do SQL Server aberta para várias solicitações em C #?


SqlConnection do ADO.NET está implementando um pool de conexões. Isso significa que quando você fecha ou descarta uma instância de SqlConnection , a conexão subjacente simplesmente retorna ao pool. Quando outra instância de SqlConnection for aberto e uma conexão estiver disponível no pool de conexões, essa conexão será usada.
Na verdade, a página de documentos da Microsoft no pool de conexões do SQL Server afirma claramente:

Cuidado
Recomendamos que você sempre feche a conexão quando terminar de usá-la para que a conexão seja devolvida ao pool. Você pode fazer isso usando os métodos Close ou Dispose do objeto Connection ou abrindo todas as conexões dentro de uma instrução using em C# ou uma instrução Using no Visual Basic. As conexões que não são explicitamente fechadas podem não ser adicionadas ou retornadas ao pool. Para obter mais informações, consulte using Statement ou How to:Dispose of a System Resource for Visual Basic.

Isso significa que a maneira prática recomendada de usar SqlConnection é isto:
using(var con = new SqlConnection(connectionString))
{
    // your sql stuff goes here...
}

BTW, SqlCommand , SqlDataReader e SqlDataAdapter também implementa o IDisposable interface, então eles também precisam ser usados ​​no contexto do using demonstração:
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))
        {

        }

    }
}