ENIGMA - Su ExecuteReader - Ripetuto

mercoledì 09 gennaio 2008 - 11.54

gmt Profilo | Junior Member

Salve,
un mio programma deve fare purtroppo(e non è possibile fare altrimenti) molti cicli e all'interno instanzio e uso OleDbCommand e OleDbDataReader..

Quello che posto è una parte di codice (con le prove della disperazione) che si blocca dopo alcune decine/centinaia di elaborazioni.. nella riga segnata, la connessione è aperta sopra e chiusa lla fine..
Ho provato anche a fare una funzione che apre la connessione, restituisce il DataReader e chiude la connessione.. IDEM anzi. anche peggio..

Il messaggio 'Errore non specificato..'
Il database è Access e ho messo Jet 4.0 Service Pack 8 (SP8) per Windows XP.. il programma è C# Windows application..

//oComm3.CommandText = sSQL;
//DrOrd3.Close();
//DrOrd3.Dispose();
//oComm3.Dispose();
//oComm3 = new OleDbCommand(sSQL, oConn);
---> //DrOrd3 = oComm3.ExecuteReader();

Sono disperato ! non so cosa fare !!
Grazie a chi riesce ad aiutarmi

FedericoC Profilo | Junior Member

Forse access non riesce a reggere il carico...

Da quanto ho letto l'errore non avviene su una riga specifica ma avviene dopo un tot di tempo, secondo me il database non riesce a gestire tutto...

Magari prova a vedere con un contatore dopo quanto si blocca per vedere se è sempre nello stesso punto...

SSUPERPIPPO Profilo | Guru

>Salve,
>un mio programma deve fare purtroppo(e non è possibile fare altrimenti)
>molti cicli e all'interno instanzio e uso OleDbCommand e OleDbDataReader..
>
>Quello che posto è una parte di codice (con le prove della disperazione)
>che si blocca dopo alcune decine/centinaia di elaborazioni..
>nella riga segnata, la connessione è aperta sopra e chiusa lla
>fine..
>Ho provato anche a fare una funzione che apre la connessione,
>restituisce il DataReader e chiude la connessione.. IDEM anzi.
>anche peggio..
>
>Il messaggio 'Errore non specificato..'
>Il database è Access e ho messo Jet 4.0 Service Pack 8 (SP8)
>per Windows XP.. il programma è C# Windows application..
>
>//oComm3.CommandText = sSQL;
>//DrOrd3.Close();
>//DrOrd3.Dispose();
>//oComm3.Dispose();
>//oComm3 = new OleDbCommand(sSQL, oConn);
>---> //DrOrd3 = oComm3.ExecuteReader();
>
>Sono disperato ! non so cosa fare !!
>Grazie a chi riesce ad aiutarmi

Personalmente ricercherei la causa nella gestione di apertura e chiusura del DataBase.
Se può esserti utile nel mio blog (link sotto) trovi una classe già pronta per la gestione semplificata degli accessi al Database...

ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

gmt Profilo | Junior Member

Ringrazio per il tempo dedicatomi, ma ho implementato la tua classe.. e mi da errore anche prima.. purtroppo
Io comunque apro una sola connessione.. e la chiudo alla fine..
Non so piu' che fare.. sigh

SSUPERPIPPO Profilo | Guru

Se puoi postare il codice che hai usato per implementare la mia classe vedo dove hai sbagliato.

Ciao

Ale

http://blogs.dotnethell.it/alebadalin

FedericoC Profilo | Junior Member

Io proverei a mettere un timer che dopo un tot. di tempo ferma il codice temperaneamente (sleep), in modo da far rifiatare il computer, se così riesci ad eseguire tutte le query significa che è un problema di "sovraccario" del pc...

RedStripe Profilo | Newbie

Possibile che l' errore non sia definito? Hai provato con la gestione try catch?? Non ti dice niente di significativo? Se ha molti accessi ripetuti e ravvicinati nel tempo perchè apri e chiudi la connessione tutte le volte? Prova a aprirla all' avvio e chiuderla alla chiusura dell' applicazione. Penso che il problema sia legato allo stress del db di access causato dalle troppe aperture/chiusure di connessione..

gmt Profilo | Junior Member

Salve,
grazie dell''interessamento.. ho risolto in maniera diversa.
Mi sono creato un paio di tabelle temporanee di appoggio con dei dati e poi con una solo query ho fatto tutto il lavoro.. da 2 pagine di codice sono arrivato a 10 righe.
Comunque credo che sia legato al binomio Connessioni+Access che viene troppo stressato.. Di giri ne faceva davvero molti..
Purtroppo il vecchio codice non c'è più, ma se volete fare una prova.. fate un ciclo, e all'interno aprite una connessione ad access, fate 3-4 select e una insert.. chiudete la connessione..

Grazie a tutti
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5