SqlConnection
von ADO.NET implementiert einen Verbindungspool. Dies bedeutet, dass beim Schließen oder Verwerfen einer Instanz von SqlConnection
, kehrt die zugrunde liegende Verbindung einfach zum Pool zurück. Wenn eine andere Instanz von SqlConnection
geöffnet wird und eine Verbindung im Verbindungspool verfügbar ist, wird diese Verbindung verwendet.
Tatsächlich heißt es auf der Microsoft-Dokumentationsseite zum SQL Server-Verbindungspooling eindeutig:
Achtung
Wir empfehlen dringend, dass Sie die Verbindung immer schließen, wenn Sie sie nicht mehr verwenden, damit die Verbindung wieder zum Pool zurückkehrt. Sie können dies entweder mit den Methoden Close oder Dispose des Connection-Objekts tun oder indem Sie alle Verbindungen innerhalb einer using-Anweisung in C# oder einer Using-Anweisung in Visual Basic öffnen. Verbindungen, die nicht explizit geschlossen wurden, werden möglicherweise nicht hinzugefügt oder dem Pool zurückgegeben. Weitere Informationen finden Sie unter using-Anweisung oder How to:Dispose of a System Resource for Visual Basic.
Dies bedeutet, dass die bewährte Art der Verwendung von SqlConnection
ist das:
using(var con = new SqlConnection(connectionString))
{
// your sql stuff goes here...
}
Übrigens, SqlCommand
, SqlDataReader
und SqlDataAdapter
implementiert auch das IDisposable
Schnittstelle, also müssen sie auch im Kontext von using
verwendet werden Aussage:
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))
{
}
}
}