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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.