Datareader ancora attivo che ... non esiste!

martedì 22 aprile 2014 - 17.33
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  MySQL 5.1  |  Access (.mdb)  |  Firefox

ravalon Profilo | Expert

Salve a tutti, ho un progetto che mi riporta un messaggio in cui mi si dice che ho un datareader ancora attivo e che pertanto non posso instanziare una connessione sull'oggetto command.

L'errore lo ottengo nel momento in cui assegno un oggetto connessione all'oggetto Command....

Nel progetto esiste uno ed un solo Datareader e so per certo che questo viene espressamente chiuso poco prima di generare l'errore....per cui...a quale diamine di datareader si riferisce dato che l'unico che ho è chiuso (il debugger con un punto di watch mi dice IsClosed =true) ??

Altro mistero.... ho inviato un pezzo di codice allo sviluppatore del provider di dati...dice che da test fatti il blocco non risulta sul datareader che ho e che quindi ne deve esistere per forza un altro....ma io non ce l'ho !!!

Avevo già messo un topic sull'argomento ma specifico per un provider dati; ora la mia richiesta è più generica, ossia...come faccio ad individuare chi mi blocca l'esecuzione in un caso come questo ? Per quello che è in mio potere le ho provate di tutte...

Aggiungo che lo stesso codice non genera alcun errore su altri 4 provider di dati e che utilizzo il provider factory.

Grazie a chi vorrà aiutarmi in questo macello che dura ormai da più di un mese...


0v3rCl0ck Profilo | Guru

te la butto li, hai provato con l'IntelliTrace di visual studio?

http://blogs.msdn.com/b/zainnab/archive/2013/02/12/understanding-intellitrace-part-i-what-the-is-intellitrace.aspx

registra tantissimi eventi di ADO.NET e forse potresti capire chi blocca cosa


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

ravalon Profilo | Expert

Dopo piu di un mese, oggi a sorpresa ho trovato l'inghippo...

Tutto era dovuto a questa riga di codice.

frmAutomazione.SorgenteAutomazioni.DataSource = objCmd.ExecuteReader

In pratica io cercavo un Datareader come oggetto dichiarato come tale, non pensavo al fatto che, chiamando il metodo ExecuteReader, si genera comunque un Datareader, che in sostanza mi rimaneva appeso...

Il problema lo dava solamente su SQLite con .NET provider, però è comunque un errore di progettazione mio....

Grazie comunque, farò tesoro del tracciamento di cui mi parli e che non conoscevo.

0v3rCl0ck Profilo | Guru

anche per questi motivi ti dicevo di incapsulare l'accesso ai dati in classi create ad-hoc che gestiscono le connessioni , in modo che chi le utilizza è tranquillo nel farlo, e se mai una connessione rimanesse appesa, sai subito dove guardare, di certo non nel codice dell'interfaccia grafica


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

ridaria Profilo | Expert

.... e non la chiude,

o ancora hai da qualche parte un datareader aperto con quella connessione "connetti" che ti impedisce.

Ripeto, devi cercare il datareader aperto.


te lo avevo detto o no che avevi un datareader APERTO.

CIAO
Riccardo D'Aria

ravalon Profilo | Expert

si ridaria, avevi ragione, ma se invece di essere arrogante mi spiegavi, come ha fatto qualcun altro che poi mi ha guidato alla soluzione con questo piccolo suggerimento, che non dovevo cercare solo sugli oggetti dichiarati come Datareader ma anche su una chiamata del genere, che comunque genera un datareader, forse non avrei penato cosi tanto.

Inoltre, non mi pare proprio un errore ed infatti il codice passa senza intoppi su tutti i database che uso...anzi...su tutti i data provider che uso...perchè credo sia un problema di provider dati... gli altri non generano nessun datareader appeso....

ridaria Profilo | Expert

>si ridaria, avevi ragione, ma se invece di essere arrogante mi
>spiegavi, come ha fatto qualcun altro che poi mi ha guidato alla
>soluzione con questo piccolo suggerimento, che non dovevo cercare
>solo sugli oggetti dichiarati come Datareader ma anche su una

non pensavo che tu non sapessi che anche altri oggetti aprono dei dataReader.

Ciao

Riccardo D'Aria
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5