Sapere quale dataReader è aperto

venerdì 21 aprile 2006 - 16.19

escaflowne Profilo | Junior Member

Ciao a tutti,
è possibile, con qualche funzione, metodo ecc, sapere quali dataReader sono ancora aperti?
In pratica mi succede che, in alcune situazioni, il programma (sviluppato in vb .net 2003) mi dia un errore di dataReader già aperto (questo perchè provo ad aprire un dataReader ma, ovviamente, se non si chiude quello già aperto non si può fare), però non so quale sia (ce ne sono diversi e succede quando smanetto un po').
Il debug sarebbe troppo oneroso quindi mi chiedevo se esistesse un modo per conoscere quale dataReader sia, eventualmente, già aperto.

Grazie a tutti

trinity Profilo | Guru

Ovviamente quando apri un datareader con il metodo Read poi lo devi chiudere perchè è normale che quando vai a richiamare di nuovo l'apertura del datareader ti esce l'errore che il datareader è aperto...

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

>Ovviamente quando apri un datareader con il metodo Read poi lo
>devi chiudere perchè è normale che quando vai a richiamare di
>nuovo l'apertura del datareader ti esce l'errore che il datareader
>è aperto...
>
>Ciao
>Cirillo Fabio
>www.wondernet.biz
>fabio@wondernet.biz
>http://blogs.dotnethell.it/fabiocirillo/

certo, a questo ci arrivo
Il fatto è che, probabilmente, mi sono dimenticato di chiuderlo da qualche parte o gestisco una catch senza chiuderlo.
Invece di fare il debug del programma (abbastanza lunghetto), speravo nell'esistenza di un metodo che mi permettesse di identificare un eventuale dataReader aperto

trinity Profilo | Guru

Non mi risulta
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

peccato

Grazie comunque

Cteniza Profilo | Guru

Se utilizzi la clausola Using (fw 2.0) il datareader dovrebbe venir chiuso automaticamente esempio:
Using myConn As new OleDbConnection
Using myCommand As new OleDbCommand
Using dr As DataReader = myCommand.ExecuteReader
While dr.Read()
End While
End Using
End Using
End Using

escaflowne Profilo | Junior Member

>Se utilizzi la clausola Using (fw 2.0) il datareader dovrebbe
>venir chiuso automaticamente esempio:
>Using myConn As new OleDbConnection
> Using myCommand As new OleDbCommand
> Using dr As DataReader = myCommand.ExecuteReader
> While dr.Read()
> End While
> End Using
> End Using
>End Using

interessante, ci provo e vi faccio sapere.
Grazie

escaflowne Profilo | Junior Member

ho risolto alla radice il problema,
invece di dichiarare e utilizzare, in diversi moduli e form, un datareader, ne ho messo uno in un modulo e reso pubblico.
Almeno sono certo che ne utilizzo uno alla volta e lo chiudo sempre

trinity Profilo | Guru

Ma questo metodo è quello che di solito faccio anch'io..ops allora non ho capito bene al tua domanda, scusami tanto

Ciao alla prossima
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

>Ma questo metodo è quello che di solito faccio anch'io..ops allora
>non ho capito bene al tua domanda, scusami tanto
>
>Ciao alla prossima
>Cirillo Fabio
>www.wondernet.biz
>fabio@wondernet.biz
>http://blogs.dotnethell.it/fabiocirillo/

ok, tutto a posto.
Ti ringrazio comunque per lo scambio di informazioni

trinity Profilo | Guru

Nel forum al termine del post bisogna stabilere di accettare la risposta, è la prassi

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

>Nel forum al termine del post bisogna stabilere di accettare
>la risposta, è la prassi
>
>Ciao
>Cirillo Fabio
>www.wondernet.biz
>fabio@wondernet.biz
>http://blogs.dotnethell.it/fabiocirillo/

hai ragione, mi spiace, ma prima volevo testare che tutto funzionasse.
A tal proposito mi togli una curiosità?
Ho, in un modulo la dichiarazione pubblica di due dataReader (myReader e myReader1)

Nell'evento click di un bottone di una form eseguo:
try
myReader.Close()
catch
end try
try
myReader1.Close()
catch
end try
myReader = myCommand.ExecuteReader ....

Bene, all'ultima riga (myReader=....) mi da un'errore "esiste già un dataReader aperto"
Ma com'è possibile?
Non ci sono altri dataReader all'infuori dei due indicati in alto; ma i try catch non dovrebbero, se ci fosse un dataReader aperto, chiuderlo?
Dove sbaglio?

Grazie

trinity Profilo | Guru

>>Nel forum al termine del post bisogna stabilere di accettare
>>la risposta, è la prassi
>>
>>Ciao
>>Cirillo Fabio
>>www.wondernet.biz
>>fabio@wondernet.biz
>>http://blogs.dotnethell.it/fabiocirillo/
>
>hai ragione, mi spiace, ma prima volevo testare che tutto funzionasse.
>A tal proposito mi togli una curiosità?
>Ho, in un modulo la dichiarazione pubblica di due dataReader
>(myReader e myReader1)
>
>Nell'evento click di un bottone di una form eseguo:
>try
> myReader.Close()
>catch
>end try
>try
> myReader1.Close()
>catch
>end try
>myReader = myCommand.ExecuteReader ....
>
>Bene, all'ultima riga (myReader=....) mi da un'errore "esiste
>già un dataReader aperto"
>Ma com'è possibile?
>Non ci sono altri dataReader all'infuori dei due indicati in
>alto; ma i try catch non dovrebbero, se ci fosse un dataReader
>aperto, chiuderlo?
>Dove sbaglio?
>
>Grazie


Prima di tutto ti consiglio sempre di inserire un messaggio di dopo il catch perchè così non capirai mai se esegue il try correttamente oppure c'è un'errore nel codice. Comunque potrebbe essere che hai un reader non chiuso su una form aperta contamporaneamente

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

>
>Prima di tutto ti consiglio sempre di inserire un messaggio di
>dopo il catch perchè così non capirai mai se esegue il try correttamente
>oppure c'è un'errore nel codice. Comunque potrebbe essere che
>hai un reader non chiuso su una form aperta contamporaneamente
>
>ciao
>Cirillo Fabio
>www.wondernet.biz
>fabio@wondernet.biz
>http://blogs.dotnethell.it/fabiocirillo/

il messaggio l'ho messo e mi da l'errore in una procedura richiamata dal bottone premuto. Pur essendo una form modale (quindi effettivamente c'è una form aperta in background) la form mi da errore solo in quel punto, nonostante prima faccia altro.
Ho provato a debuggare il tutto e non c'è verso di cavare nulla di interessante. In pratica io faccio (alla pressione del tasto)
1. apro un dataReader
2. Inserisco dei dati nel database
3. chiudo il dataReader
4. Apro un datareader
5. Eseguo altre cosucce sul db
6. Chiudo il dataReader
7. Lancio la procedura incriminata che prova (con try catch) a chiudere i due dataReader esistenti e apre il datareader per eseguire delle istruzioni sul db (e su questa ultima apertura da l'errore)

Aggiungo che la procedura in questione viene eseguita anche al load del form senza problemi

boh

trinity Profilo | Guru

>>
>>Prima di tutto ti consiglio sempre di inserire un messaggio di
>>dopo il catch perchè così non capirai mai se esegue il try correttamente
>>oppure c'è un'errore nel codice. Comunque potrebbe essere che
>>hai un reader non chiuso su una form aperta contamporaneamente
>>
>>ciao
>>Cirillo Fabio
>>www.wondernet.biz
>>fabio@wondernet.biz
>>http://blogs.dotnethell.it/fabiocirillo/
>
>il messaggio l'ho messo e mi da l'errore in una procedura richiamata
>dal bottone premuto. Pur essendo una form modale (quindi effettivamente
>c'è una form aperta in background) la form mi da errore solo
>in quel punto, nonostante prima faccia altro.
>Ho provato a debuggare il tutto e non c'è verso di cavare nulla
>di interessante. In pratica io faccio (alla pressione del tasto)
>1. apro un dataReader
>2. Inserisco dei dati nel database
>3. chiudo il dataReader
>4. Apro un datareader
>5. Eseguo altre cosucce sul db
>6. Chiudo il dataReader

ma se i datareader li chiudi ad ogni passaggio perchè devi eseguire un'altra chiusura?

>7. Lancio la procedura incriminata che prova (con try catch)
>a chiudere i due dataReader esistenti e apre il datareader per
>eseguire delle istruzioni sul db (e su questa ultima apertura
>da l'errore)
>
>Aggiungo che la procedura in questione viene eseguita anche al
>load del form senza problemi
>
>boh

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

ho provato ad eliminare il secondo dataReader, adesso ne ho solo uno, quindi è impossibile che rimanga aperto un dataReader se prima lo chiudo.

try
myReader.Close()
catch
end try

myReader = myCommand.executeReader(.....)

ma mi continuava a dare errore di un dataReader ancora aperto

Alla fine ho risolto tutto in modo "ignobile" ma, almeno per ora, posso continuare (poi rivedrò tutto): ho chiuso la connessione al db e l'ho riaperta prima dell'apertura del reader. Così funziona
boh.

Grazie comunque

trinity Profilo | Guru

Sicuramente ti sfugge una parte di codice! ricontrolla in maniera + accurata e vedrai che troverai il datareader ancora perto da qualche parte..

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

escaflowne Profilo | Junior Member

si, sicuramente controllerò per bene (la soluzione è temporanea per non bloccarmi il lavoro) anche perchè la soluzione trovata è obbrobiosa.
Però, da come ho corretto il codice, mi meraviglia tanto che non funzioni.
Insomma, io ho un solo data reader in tutto il programma e lo chiudo con la try catch prima di aprirlo. Com'è possibile che ce ne sia un altro aperto? (Ho cercato anche con il search se ci sono altri dataReader e non ne ho trovati)

Grazie comunque

trinity Profilo | Guru

attenzione puoi anche averlo dichiarato con un altro nome e non te lo ricordi!



ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5