web-dev-qa-db-fra.com

Comment faire pour parcourir les lignes avec un lecteur de données en C #?

Je sais que je peux utiliser while(dr.Read()){...} mais que tous les champs de ma table sont bouclés, je veux récupérer toutes les valeurs de la première ligne, puis second ... et ainsi de suite.

Disons que j'ai un tableau comme celui-ci:

ID--------------Value1--------------Value2------------------Value3
1               hello               hello2                  hello3
2               hi1                  hi2                      hi3

je veux d'abord obtenir hello, hello2 et hello3, puis passer à la deuxième ligne et obtenir toutes les valeurs.

Y a-t-il un moyen d'y parvenir? J'espère que quelqu'un comprend ce que je veux dire.

Je suis vraiment désolé, c'est résolu maintenant. Je n'étais juste pas en train de coder correctement ...

Et oui, la méthode SqlDataReader.Read () fait ce qu'elle est censée faire, encore une fois, l'erreur était la mienne.

39
Slacker616

C’est ainsi que fonctionne DataReader, il est conçu pour lire les lignes de la base de données une à une.

while(reader.Read()) 
{
  var value1 = reader.GetValue(0); // On first iteration will be hello
  var value2 = reader.GetValue(1); // On first iteration will be hello2
  var value3 = reader.GetValue(2); // On first iteration will be hello3
}
64
Rich O'Kelly
int count = reader.FieldCount;
while(reader.Read()) {
    for(int i = 0 ; i < count ; i++) {
        Console.WriteLine(reader.GetValue(i));
    }
}

Remarque; si vous avez plusieurs grilles, alors:

do {
    int count = reader.FieldCount;
    while(reader.Read()) {
        for(int i = 0 ; i < count ; i++) {
            Console.WriteLine(reader.GetValue(i));
        }
    }
} while (reader.NextResult())
29
Marc Gravell

Ou vous pouvez essayer d'accéder aux colonnes directement par nom:

while(dr.Read())
{
    string col1 = (string)dr["Value1"];
    string col2 = (string)dr["Value2"];
    string col3 = (string)dr["Value3"];
}
18
Tudor

Il n’ya aucun moyen d’obtenir "la ligne entière" en une fois - vous devez parcourir les lignes en boucle et, pour chaque ligne, vous devez lire chaque colonne séparément:

using(SqlDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        string value1 = rdr.GetString(0);
        string value2 = rdr.GetString(1);
        string value3 = rdr.GetString(2);
    }
}

Ce que vous faites avec les chaînes que vous lisez pour chaque ligne appartient à vous. Vous pouvez les stocker dans une classe que vous avez définie, ou peu importe ...

6
marc_s

Comment faire pour parcourir les lignes avec un lecteur de données en C #?

IDataReader.Read() fait avancer le lecteur à la ligne suivante du jeu de résultats.

while(reader.Read()){
    /* do whatever you'd like to do for each row. */
}

Ainsi, pour chaque itération de votre boucle, vous feriez une autre boucle, de 0 à reader.FieldCount, et appeleriez reader.GetValue(i) pour chaque champ.

La grande question est de savoir quel type de structure voulez-vous utiliser pour conserver ces données?

3
canon

En réalité, la méthode Read parcourt les enregistrements d'un ensemble de résultats. Dans votre cas - sur les lignes de la table. Donc, vous pouvez toujours l'utiliser.

1
Yuriy Rozhovetskiy
while (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        subjob.Items.Add(dr[i]);
    }
}

lire des lignes dans une colonne

0
irfan majeed