sql >> Databasteknik >  >> RDS >> Sqlserver

Hur håller man en enda SQL Server-anslutningsinstans öppen för flera begäranden i C#?

ADO.NET:s SqlConnection implementerar en anslutningspool. Detta betyder att när du stänger eller kasserar en instans av SqlConnection , återgår den underliggande anslutningen helt enkelt till poolen. När en annan instans av SqlConnection öppnas och en anslutning är tillgänglig i anslutningspoolen kommer den anslutningen att användas.
Faktum är att Microsoft docs-sidan på SQL Server Connection Pooling tydligt säger:

Varning
Vi rekommenderar starkt att du alltid stänger anslutningen när du är klar med den så att anslutningen kommer tillbaka till poolen. Du kan göra detta med antingen Close- eller Dispose-metoderna för Connection-objektet, eller genom att öppna alla anslutningar i en use-sats i C# eller en Using-sats i Visual Basic. Anslutningar som inte är explicit stängda kanske inte läggs till eller returneras till poolen. För mer information, se hur du använder Statement eller How to:Kasta en systemresurs för Visual Basic.

Detta innebär att det bästa sättet att använda SqlConnection är detta:

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

BTW, SqlCommand , SqlDataReader och SqlDataAdapter implementerar även IDisposable gränssnitt, så de måste också användas i samband med using uttalande:

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

        }

    }
}


  1. Hur man använder kommandot Compact and Repair i Access

  2. KNIME

  3. Sammanfoga flera resultatrader i en kolumn till en, gruppera efter en annan kolumn

  4. GROUP_CONCAT motsvarande i Django