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

Hvordan holder man en enkelt SQL Server-forbindelsesinstans åben for flere anmodninger i C#?

ADO.NET's SqlConnection implementerer en forbindelsespulje. Det betyder, at når du lukker eller bortskaffer en forekomst af SqlConnection , vender den underliggende forbindelse blot tilbage til poolen. Når en anden forekomst af SqlConnection er åbnet, og en forbindelse er tilgængelig i forbindelsespuljen, vil denne forbindelse blive brugt.
Faktisk siger Microsoft docs-siden på SQL Server Connection Pooling tydeligt:

Forsigtig
Vi anbefaler på det kraftigste, at du altid lukker forbindelsen, når du er færdig med at bruge den, så forbindelsen bliver returneret til poolen. Du kan gøre dette ved at bruge enten Close- eller Dispose-metoderne for Connection-objektet eller ved at åbne alle forbindelser inde i en use-sætning i C# eller en Using-sætning i Visual Basic. Forbindelser, der ikke udtrykkeligt er lukket, bliver muligvis ikke tilføjet eller returneret til poolen. For mere information, se brug af Statement eller How to:Disponere of a System Resource for Visual Basic.

Dette betyder, at den bedste praksis måde at bruge SqlConnection på er dette:

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

BTW, SqlCommand , SqlDataReader og SqlDataAdapter implementerer også IDisposable grænsefladen, så de skal også bruges i sammenhæng med using erklæring:

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. SQL Server - indre joinforbindelse ved opdatering

  2. Grundlæggende om tabeludtryk, del 4 – Afledte tabeller, optimeringsovervejelser, fortsat

  3. Sådan indsætter du flere rækker i MySQL

  4. Brug af SSH Tunneling som et VPN-alternativ