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