sql >> Database >  >> RDS >> Sqlserver

Hoe een enkele SQL Server-verbindingsinstantie open te houden voor meerdere aanvragen in C#?

ADO.NET's SqlConnection implementeert een verbindingspool. Dit betekent dat wanneer u een exemplaar van SqlConnection sluit of verwijdert , keert de onderliggende verbinding gewoon terug naar de pool. Wanneer een ander exemplaar van SqlConnection is geopend en er een verbinding beschikbaar is in de verbindingspool, wordt die verbinding gebruikt.
In feite vermeldt de Microsoft-documentpagina op SQL Server Connection Pooling duidelijk:

Let op
We raden u ten zeerste aan om de verbinding altijd te sluiten als u klaar bent met het gebruik ervan, zodat de verbinding wordt teruggegeven aan de pool. U kunt dit doen met de methoden Close of Dispose van het Connection-object, of door alle verbindingen in een gebruiksinstructie in C# of een gebruiksinstructie in Visual Basic te openen. Verbindingen die niet expliciet zijn gesloten, worden mogelijk niet toegevoegd aan of geretourneerd aan de pool. Voor meer informatie, zie Verklaring gebruiken of Procedure:een systeembron verwijderen voor Visual Basic.

Dit betekent dat de beste manier om SqlConnection . te gebruiken is dit:

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

Tussen haakjes, SqlCommand , SqlDataReader en SqlDataAdapter implementeert ook de IDisposable interface, dus ook zij moeten worden gebruikt in de context van de using verklaring:

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. Hoofdlettergebruik van persoonsnamen in programmeren

  2. Groeperen op alias (Oracle)

  3. De PostgreSQL-correlatiefunctie gebruiken

  4. SQL-query om de dichtstbijzijnde datum te tonen?