Newsgroup: it.comp.www.asp
Titolo: [ASP.NET] Stringhe di connessione e distruzione oggetti

Salve a tutti, avrei due domande da porre:
1) In vari esempi che ho trovato su manuali di 
ASP.NET
, soprattutto nelle
sezioni dedicate alla creazione di componenti intermedi, ci sono sempre
stringhe di connessione con percorsi fisici interi; nel vecchio asp si
faceva normale uso di Server.MapPath ma questo trova impiego solo se si
costruisce la connessione direttamente nella pagina aspx perché l'oggetto è
membro di 
System.Web.UI.Page
. Ho provato ad importare questo spazio nomi nel
componente ma mi restituisce errore (oltre al mancato completamento
automatico oggetti/metodi/proprietà). Allora, si può fare in un altro modo o
è concettualmente sbagliato, in un componente, voler cercare di usare
Server.MapPath ?
2) Nel vecchio asp ogni volta che si istanziavano oggetti Connection e
Recordset venivano poi liberati alla fine dello script con:
Set rs = nothing
Set cn = nothing
In 
ASP.NET
 non trovo esempi dove viene menzionata la distruzione degli
oggetti istanziati. E' normale ?
Stefano

 oggetti istanziati. E' normale ?
Con alcuni oggetti puoi richiamare il Dispose() se è presente, altrimenti
affidare il compito alla GarbageCollection che penserà alla pulizia
completa.
Ciao
--
AZ

oggetti istanziati. E' normale ?
Non ti basta dichiararli locali?
Ygg

 Ygg
Li dichiaro "Private" ad inizio e con "New" all'interno di ogni metodo:
'Dichiarazioni
Private strConn as string = "provider......."
Private cn as OleDbConnection
.......
Public Function ProvaMetodo() as boolean
    cn = new OleDbConnection(strConn)
    try
        cn.open
        if cn.state = 1 then
            return true
        end if
    catch e as OleDbException
        return false
     finally
        cn = nothing
    end try
End Function
Ecco al momento faccio in questo modo, ed il fatto di porre cn = nothing non
mi causa alcun errore. E' corretto o č inutile ?
Stefano

     end try
Il condice il finally non verrà mai eseguito perché all'interno dello scope
try c'è un return!
Che cosa volevi fare con questo codice?
Ciao
--
AZ

 AZ
Apposta ti chiedevo un chiarimento. Insomma vorrei che gli oggetti
istanziati fossero liberati alla fine della funzione. Siamo sicuri che
finally non abbia priorità di esecuzione ?
Stefano


Mea culpa! Ho letto male.
Dunque... il codice del finally viene sì eseguito esattamente prima del
return della funzione. Ma è il come lo implementi una questa funzione che è
strano :)
Tale funzione dovrebbe controllare se è possibile connettersi ad un database
(altrimento non ne vedo lo scopo). Utilizzare, come ho già detto, cn=nothing
è pressocché inutile visto che ci penserà la garbage collection a cancellare
il tutto.
Io riscriverei la tua funzione in questo modo:
Public Function ProvaMetodo() as boolean
    cn = new OleDbConnection(strConn)
    try
        cn.open()
        if cs.state=1 then
            cn.close()
            return true
        end if
        return false
    catch e as OleDbException
        return false
    end try
Ciao
--
AZ


Infatti poi, dopo un'impegnativa ricerca sulla documentazione ne ho tratto
che: gli oggetti vengono liberati automaticamente dal GC, nel caso di codice
gestito, cioč tutto ciň che viene scritto in .net. mentre in codice non
gestito, si utilizza .Dispose() o quando si vuole essere proprio certi della
distruzione di qualunque oggetto, .Finalize(). Grazie.
Stefano


Moderatore di it.comp.www.asp - Microsoft .NET MVP
http://www.aspitalia.com/
 Enjoy the .NET community!
http://www.dev2dev.it/
 La rete ha connesso nuove particelle!
http://www.extensible.it/
 XML and beyond