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