SqlConnection
di ADO.NET sta implementando un pool di connessioni. Ciò significa che quando si chiude o si elimina un'istanza di SqlConnection
, la connessione sottostante ritorna semplicemente al pool. Quando un'altra istanza di SqlConnection
viene aperta e una connessione è disponibile nel pool di connessioni, tale connessione verrà utilizzata.
In effetti, la pagina dei documenti Microsoft sul pool di connessioni di SQL Server afferma chiaramente:
Attenzione
Si consiglia vivamente di chiudere sempre la connessione al termine dell'utilizzo in modo che la connessione venga restituita al pool. È possibile eseguire questa operazione utilizzando i metodi Close o Dispose dell'oggetto Connection oppure aprendo tutte le connessioni all'interno di un'istruzione using in C# o un'istruzione Using in Visual Basic. Le connessioni non chiuse in modo esplicito potrebbero non essere aggiunte o restituite al pool. Per ulteriori informazioni, vedere Utilizzo di Istruzione o Procedura:eliminare una risorsa di sistema per Visual Basic.
Ciò significa che il modo migliore per utilizzare SqlConnection
è questo:
using(var con = new SqlConnection(connectionString))
{
// your sql stuff goes here...
}
A proposito, SqlCommand
, SqlDataReader
e SqlDataAdapter
implementa anche IDisposable
interfaccia, quindi anche loro devono essere usati nel contesto dell'using
dichiarazione:
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))
{
}
}
}