2017-08-20 4 views
-1

Tout fonctionne bien sauf le labels[i]. La boucle écrit toujours dans htmlLabel1 et jamais dans htmlLabel2 etc. Pourquoi l'itération ne fonctionne-t-elle pas par labels[i] mais au Reader.GetValue(i)?itération de boucle ne fonctionne pas comme il se doit

MySqlConnection connection = new MySqlConnection(myConnectionString); 
MySqlCommand command = connection.CreateCommand(); 
command.CommandText = "SELECT number FROM numbers ORDER BY RAND() LIMIT 2; "; 
MySqlDataReader Reader; 
connection.Open(); 
Reader = command.ExecuteReader(); 
while (Reader.Read()) 
{ 
    HtmlLabel[] labels = new HtmlLabel[] { 
     htmlLabel1, 
     htmlLabel2, 
     htmlLabel3 
    }; 
    for (int i = 0; i < Reader.FieldCount; i++) 
    { 
     labels[i].Text = Reader.GetValue(i).ToString(); 
     Console.WriteLine(Reader.GetValue(i).ToString()); 
    } 
} 
connection.Close(); 
+0

Vous récupérez une colonne pour chaque enregistrement. La boucle interne ne boucle qu'une seule fois pour chaque enregistrement – Steve

+0

@Florian La boucle for de Reader.FieldCount parcourt les colonnes de votre instruction select sur la ligne 3. Il n'y a qu'un seul champ, numéro, à parcourir. Qu'est-ce que vous essayez de traverser? – LAS

+0

@LAS Je pense que c'est le meilleur moyen. Je veux obtenir 10 premières entrées de mysql et coller chaque entrée dans une étiquette différente. – Florian

Répondre

0

Il n'y a qu'un seul champ, donc Reader.FieldCount retournera 1 à chaque fois. si vous voulez faire une boucle par les lignes utilisent le code suivant

MySqlConnection connection = new MySqlConnection(myConnectionString); 
MySqlCommand command = connection.CreateCommand(); 
command.CommandText = "SELECT number FROM numbers ORDER BY RAND() LIMIT 2; "; 
MySqlDataReader Reader; 
connection.Open(); 
Reader = command.ExecuteReader(); 
int i=0; 
HtmlLabel[] labels = new HtmlLabel[] { 
    htmlLabel1, 
    htmlLabel2, 
    htmlLabel3 
}; 
while (Reader.Read()) 
{ 

    //for (int i = 0; i < Reader.FieldCount; i++) 
    //{ 
     labels[i].Text = Reader[0].ToString(); 
     Console.WriteLine(Reader[0].ToString()); 
    //} 
    i +=1; 
} 
connection.Close(); 
+1

Veuillez ne pas simplement jeter le code sans explication - cela n'aide personne. – DavidG

+0

J'ai édité ma réponse voir, Il peut aider –

+0

@Fatehi_Alqadasi Merci, mais maintenant je reçois IndexOutOfRangeException. – Florian