Terminare un Ciclo di lettura di un file excel tramite datareader

martedì 14 ottobre 2008 - 18.27

Sig. Travis Profilo | Junior Member

Ciao ragazzi, in un datareader come faccio a far terminare il ciclo di lettura? Su quale proprietà o metodo posso far affidamento per far terminare il ciclo di lettura?
Apro una connessione ad un file excel dopo avervi associato una stringa di comando;
eseguo il comando effetuando una lettura fuori ciclo;
entro nel ciclo per leggere i dati presenti nelle varie colonne;
leggo la prossima riga all'interno del ciclo.

Nel file Excel, anche la riga successiva all'utlima buona da leggere, non risulta propriamente NULL e quindi non riesco ad individuare un metodo per impostare una qualsiasi variabile per far terminare il ciclo.

Mi sapete aiutare?

Grazie mille,

Ciao\G

luigidibiasi Profilo | Guru

Ciao,

usi un ciclo di tipo

while datareader1.read

end while

oppure un ciclo usando do while?

forse ti conviene postare il codice che usi per far capire meglio dove sta l'inghippo. (se ho capito bene ti legge una riga in più?)
Luigi Di Biasi

Sig. Travis Profilo | Junior Member

Non so se conosci ma lavoro in COBOL Fujitsu for .NET e questo è il codice:

***--> Leggo il foglio Excel; lettura fuori ciclo.
INVOKE ExcelReader "Read" RETURNING RigheLette.
INVOKE RigheLette "ToString" RETURNING Vero.
INVOKE CLASS-STRING "Compare" USING BY VALUE Vero BY VALUE "True" RETURNING HoLetto.
PERFORM VARYING NumberRow FROM 2 BY 1 UNTIL HoLetto NOT EQUAL ZEROES
***--> Inizializzo le aree di appoggio dati.
SET NomeModulo TO NULL
SET Paragrafo TO NULL
SET Tipo TO NULL
SET Percorso TO NULL
SET Codice TO NULL
INITIALIZE RigaCol
INITIALIZE AppoRiga
INITIALIZE AppoColonna
INITIALIZE ColonnaCol
INITIALIZE NumberColumn
***--> Prima Colonna: Nome Modulo.
INVOKE ExcelReader "GetString" USING BY VALUE NumberColumn RETURNING NomeModulo
***--> Seconda Colonna: Nome del Paragrafo.
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetString" USING BY VALUE NumberColumn RETURNING Paragrafo
***--> Terza Colonna: Tipo di Codice(Paragrafo o Section).
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetString" USING BY VALUE NumberColumn RETURNING Tipo
***--> Quarta Colonna: Pathname.
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetString" USING BY VALUE NumberColumn RETURNING Percorso
***--> Quinta Colonna: Riga.
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetDouble" USING BY VALUE NumberColumn RETURNING AppoRiga
MOVE AppoRiga TO RigaCol
***--> Sesta Colonna: Colonna.
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetDouble" USING BY VALUE NumberColumn RETURNING AppoCol
MOVE AppoColonna TO ColonnaCol
***--> Settima Colonna: Codice del/la Paragrafo/Section.
ADD +1 TO NumberColumn
INVOKE ExcelReader "GetString" USING BY VALUE NumberColumn RETURNING Codice
***--> Lettura in ciclo.
INVOKE ExcelReader "Read" RETURNING RigheLette
INVOKE RigheLette "ToString" RETURNING Vero
INVOKE CLASS-STRING "Compare" USING BY VALUE Vero BY VALUE "True" RETURNING HoLetto
END-PERFORM.

Dici bene che continuo a leggere righe anche dopo aver raggiunto la fine delle righe contenenti informazioni; in poche parole nella variabile RigheLette che è un Boolean continuo ad avere TRUE anche dopo aver terminato le righe buone per me. Dovrei leggere 3295 righe ed invece continuo a ciclare ad alla 3296esima mi genera eccezione. C'è qualche proprietà che posso utilizzare per far terminare il ciclo?

Grazie,
Ciao\G

luigidibiasi Profilo | Guru

No mi spiace non conosco il linguaggio

A cosa ti serve la lettura fuori dal ciclo? Probabilmente quando la effetui sposti il putnatore del record in avanti ma non aggiori la variabile delle
righe già lette ( la mia è una ipotesi )...


dobbiamo aspettare qualcuno che usi il cobol ;)

Luigi Di Biasi
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