10 febbraio 2006 alle 22:15:38 Modificato il 10 febbraio 2006 alle 22:16:11Salve, ho letto più volte che le connessioni al database aperte e non chiuse possono portare problemi. Dal manuale ho imparato a mettere un nuovo database e implementare una pagina asp che ne legge i dati e li riproduce. Il dubbio mi viene riguardo ad un response.end che metto in una condizione. Mi chiedo se con il response.end viene terminata bruscamente la pagina e non viene chiusa la connessione. Ad es.
<% ' istruzioni di connesione al database... Dim oCn, oRs, rSQL, iLine Set oCn = DBConnexion(DB_MIO) rSQL = "SELECT * FROM miatabella" Set oRs = DBRecordSet(oCn, rSQL)
if condizione = vera then ' riproduci i record else Response.end end if
' chiudo e rilascio oRs.close Set oRs = Nothing oCn.close Set oCn = Nothing
%>
In questo caso, se la condizione è falsa e viene effettuato il response.end la connessione al DB è rimasta aperta?
11 febbraio 2006 alle 07:23:54 Esatto. L'istruzione response.end provoca il temine dell'esecuzione, come se non ci fossero altre righe da eseguire, ed il rilascio della memoria allocata dalle variabili. Ma la connessione, come tutto cio' che viene creato con l'istruzione set, non e' una variabile, ma un oggetto. La fine del codice provoca il rilascio della variabile che punta all'oggetto (ossia ne contiene l'indirizzo di memoria), ma non necessariamente dell'oggetto stesso. Per questo aspnuke ha una funzione ReleaseObjects, da usare sempe prima di una response.end (cerca nel codice di aspnuke per trovare degli esempi). Ciao
--------------- development@aspnuke.it
11 febbraio 2006 alle 07:37:33 Per completezza, diro' che l'uso della funzione DBConnexion unita alla ReleaseObjects (eseguita nel clearitall-inc.asp, includetelo sempre nelle vostre pagine!), rende teoricamente inutile la singola chiusura delle connessioni, ma solo nell'attuale implementazione (prima invece bisognava ricordarsi di farlo sempre). E' per questo che ora aspnuke non ha piu' i problemi con le connessioni che aveva una volta. Tuttavia l'attuale implementazione potrebbe cambiare, poiche' non e' ottimizzata per db che consentano il "connection pooling", quindi ricordatevi comunque di chiudere SEMPRE le connessioni (e di assegnarle a nothing). Ciao
--------------- development@aspnuke.it