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))
{
}
}
}