Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come mantenere aperta una singola istanza di connessione di SQL Server per più richieste in C#?

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

        }

    }
}