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 TryAltro 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 automaticamentePer approfondimenti si veda:
#605 - Using ed il Dispose automatico con C#
http://www.aspitalia.com/liste/usag/script.aspx?ID=605
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


