2017-08-20 11 views
-1

labels[i]以外はすべて正常に動作します。ループは常にhtmlLabel1に書き込まれ、htmlLabel2などには書き込まれません。 反復はlabels[i]では機能しませんが、Reader.GetValue(i)ではうまくいかないのはなぜですか?ループの反復はそれほどうまくいかないでしょう

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

を使用しています。内側のループはレコードごとに1回のみループします。 – Steve

+0

@Florian Reader.FieldCountのforループは、3行目のselect文の列をループします。ループするフィールドは1つだけです。何をループしようとしていますか? – LAS

+0

@LAS私はその最善の方法ですが。私はmysqlから10 rndエントリを取得し、すべてのエントリを別のラベルに貼り付ける必要があります。 – Florian

答えて

0

フィールドが1つしかないため、Reader.FieldCountは毎回1を返します。 あなたが行をループにしたい場合は、あなたは、各レコードに1つの列を取得している次のコード

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

誰も助けるものではない説明だけでコードをダンプしないでください。 – DavidG

+0

私は私の答えを編集しました、それは助けるかもしれません –

+0

@ Fatehi_Alqadasiありがとう、しかし今私はIndexOutOfRangeExceptionを取得します。 – Florian

関連する問題