Funzione ricorsiva con datareader. Come evitare l'apertura di nuove co...

mercoledì 18 giugno 2008 - 22.32

mmsoftware Profilo | Newbie

Esempio di esplosione di una distinta base.
//Preparo una connessione
miaConnessione = Connessione.Sqlconnection
//Preparo un comando
mioComando = Comando
//Assegno lo statemente al comando
Statement sql: Select Assieme, Componente from tabella.db where Assieme = ?
//Aggiungo un parametro alla collezione del comando
mioComando.Parametro.aggiungi(assieme)
//Passo alla funzione EsplodiDb: il valore dell'assieme da esplodere, il comando preparato, la connessione ancora chiusa
EsplodiDb(unValore, mioComando, miaConnessione)
//----- Funzione ricorsiva
Funzione EsplodiDb (parAssieme, parComando, parConnessione)
parConnessione.Apri
parComando.Connessione = parConnessione
parComando.parametro(Assieme).valore = parAssieme
mioReader = parComando.EseguiReader
//Ciclo di lettura
while mioReader.read
//Scambio Componente->Assieme
mioAssieme = mioReader.item(Componente)
miaNuovaConnessione = Connessione.Sqlconnection
Statement sql: Select Assieme, Componente from tabella.db where Assieme = ?
mioNuovoComando.Parametro.aggiungi(assieme)
EsplodiDb (mioAssieme , mioNuovoComando, miaNuovaConnessione )
next
//Termine chiusura reader, rilascio comando, chiusura connessione
mioReader.chiudi
parConnessione.chiudi
end function
//---Termine funzione recursiva
Da valutare: il datareader è efficiente; finchè il datareader è aperto la connessione è impegnata e quindi non utilizzabile per altre letture (per questo nuove connessioni); di contro, apro nuove connessioni ad ogni lettura (conseguenze note!!) e anche se naturalmente, al termine della recursione, vengono tutte correttamente chiuse, chiedo un vostro suggerimento per evitare le enne aperture CONSERVANDO L'UTILIZZO DEL DATAREADER. Altri test di funzione ricorsiva che utilizzavano un normale ciclo di lettura dell'archivio ed una sola connessione aperta esternamente alla funzione, non hanno dato il risultato di velocità/efficienza del DataReader. Qualcuno di Voi sa come superare il limite dato dall'impegno fino alla sua chiusura della connessione o un approccio diverso ed altrettanto efficiente? Non mandatemi degli accidenti !!! Ciao a tutti

Cteniza Profilo | Guru

Ti consiglio di appendere di volta in volta i tuoi dati su una datatable utilizzando il datareader.
Puoi fare così:
Cerca l'elemento sulla datatable se non trovato apre nuovo datareader appendi dati al datatable leggi dati dal datatable

mmsoftware Profilo | Newbie

Si, così funziona!! anche se cercavo una soluzione un po' diversa. Ti ringrazio per il prezioso contributo.
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