Migliorare la connessione al database con ADO.NET

di Daniele Bochicchio, in ASP.NET, C#, ADO.NET,

A differenza di quanto accade con ADO, in ADO.NET una mancata chiusura della connessione al database può portare a problemi ben più gravi, come la mancanza di connessioni disponibili per altri client.
Se infatti nel primo caso l'oggetto esce dallo scope non appena la pagina è eseguita, nel secondo la sua gestione viene demandata al Garbage Collector, che si occuperò di fare il dispose degli oggetti.
Ciò che è necessario rimarcare è che il GC interviene in modo non deterministico, che vuol dire, in parole povere, che è probabile che l'oggetto che rappresenta la connessione prima di essere scaricato può rimanere attivo anche per ore.
Per questo motivo, più che mai, con ADO.NET è quanto mai opportuno chiudere esplicitamente le connessioni.
L'esempio più significativo è un errore che si verifichi dopo aver aperto il database, cosa che porta alla non esecuzione del metodo Close.
Un ottimo sistema per evitare questo comportamento è utilizzare un blocco try..finally, come segue:

Dim conn as SqlConnection  = new SqlConnection(connString)
Try 
  conn.Open()
  ' operazioni che leggono dal database
Finally
  ' chiusura connessione
  conn.Close()
End Try

Altro sistema, così come documentato nello script #605, consiste nell'utilizzare, con C#, using, in questo modo:

using (SqlConnection conn = new SqlConnection(connString))
{
  // operazioni
} // .Dispose invocato automaticamente

Approfondimenti


#605 - Using ed il Dispose automatico con C#
https://www.aspitalia.com/liste/usag/script.aspx?ID=605

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi