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.
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
}
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())
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"];
}
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 ...
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?
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.
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
subjob.Items.Add(dr[i]);
}
}
lire des lignes dans une colonne