Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment garder une seule instance de connexion SQL Server ouverte pour plusieurs requêtes en C# ?

SqlConnection d'ADO.NET implémente un pool de connexions. Cela signifie que lorsque vous fermez ou supprimez une instance de SqlConnection , la connexion sous-jacente retourne simplement au pool. Lorsqu'une autre instance de SqlConnection est ouverte et qu'une connexion est disponible dans le pool de connexions, cette connexion sera utilisée.
En fait, la page de documentation Microsoft sur le pooling de connexions SQL Server indique clairement :

Attention
Nous vous recommandons fortement de toujours fermer la connexion lorsque vous avez fini de l'utiliser afin que la connexion soit renvoyée au pool. Pour ce faire, vous pouvez utiliser les méthodes Close ou Dispose de l'objet Connection ou en ouvrant toutes les connexions à l'intérieur d'une instruction using en C# ou d'une instruction Using en Visual Basic. Les connexions qui ne sont pas explicitement fermées peuvent ne pas être ajoutées ou renvoyées au pool. Pour plus d'informations, consultez Utilisation de l'instruction ou Comment :supprimer une ressource système pour Visual Basic.

Cela signifie que la meilleure façon d'utiliser SqlConnection est-ce :

using(var con = new SqlConnection(connectionString))
{
    // your sql stuff goes here...
}

BTW, SqlCommand , SqlDataReader et SqlDataAdapter implémente également le IDisposable interface, ils doivent donc également être utilisés dans le contexte de using déclaration :

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

        }

    }
}