Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann eine einzelne SQL Server-Verbindungsinstanz für mehrere Anfragen in C# geöffnet bleiben?

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

        }

    }
}