#634 - Migliorare la connessione al database con 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

Per approfondimenti si veda:

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


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC