La mia domanda è come ottenere il numero di righe restituite da una query utilizzando SqlDataReader
in C#. Ho visto alcune risposte a riguardo ma nessuna è stata definita chiaramente tranne una che afferma di fare un ciclo while con il metodo Read()
e incrementare un contatore.Come ottenere il numero di righe utilizzando SqlDataReader in C#
Il mio problema è che sto cercando di riempire un array multidimensionale con la prima riga come i nomi delle intestazioni di colonna e ogni riga dopo quella per essere i dati di riga.
So che posso semplicemente scaricare le cose in un controllo List e non preoccuparmi di questo, ma per la mia personale edificazione e vorrei anche estrarre i dati dentro e fuori dall'array mentre lo scelgo e lo visualizzo in diversi formati.
Quindi penso che non posso fare il Read()
e quindi incrementare modo ++, perché questo significa che avrei dovuto aprire Read()
e quindi aprire Read()
di nuovo per ottenere quantità di righe e poi dati della colonna.
Solo un piccolo esempio di cosa sto parlando:
int counter = 0;
while (sqlRead.Read())
{
//get rows
counter++
}
e poi un ciclo for per eseguire attraverso le colonne e pop
something.Read();
int dbFields = sqlRead.FieldCount;
for (int i = 0; i < dbFields; i++)
{
// do stuff to array
}
Henk ha ragione: non esiste un membro di DataReader che ti permetta di ottenere il numero di righe perché è un lettore di sola andata. È meglio fare prima ottenere il conteggio e poi eseguire la query, magari in una query a più risultati in modo da colpire il database una sola volta. – flipdoubt
Il problema con il conteggio specializzato è che esiste il potenziale per il conteggio di essere diverso dal numero di righe restituite perché qualcun altro ha modificato i dati in un modo che porta al numero di righe restituite. –
Pete, hai ragione, richiederebbe un costoso IsolationLevel. –