0

毎回新しい結果を取得するループ内で mysql クエリを実行しようとしています。私が直面している問題は、ループが最初にのみ正常にループしていることです。つまり、idcount が 5 の場合、1 にしかならず、2 に入るとエラーが表示されます。

Read () を呼び出す前にフィールドにアクセスしようとする試みは無効
です。この行にある " string result2 = mysqlReader5[0].ToString(); "

このループを成功させるために私を助けていただければ幸いです

事前にサンクス。

for (int i = 0; i < idcount; i++)
    {
        connection.Open();

        string x = idarray[i];


        ImageLoop img = new ImageLoop();
        image[i] =img.imageloop(x);

        MySqlCommand mysqlCmd5 = new MySqlCommand("SELECT  image  FROM useralbum where user_id='" + x + "' LIMIT 0,1;", connection);

        MySqlDataReader mysqlReader5 = mysqlCmd5.ExecuteReader();

        while (mysqlReader5.Read())
        {

        }
        string result2 = mysqlReader5[0].ToString();


        image[i] = result2;

        connection.Close();
    }
4

4 に答える 4

1

while ループの外側でリーダーにアクセスしています。内側にある必要があります。お気に入り:

while (mysqlReader5.Read())
    {
    string result2 = mysqlReader5[0].ToString();
    image[i] = result2;
    }

また、への代入image[i]は while ループ内で行う必要があります。

于 2013-02-13T05:43:51.013 に答える
1

while ブロック内の値にアクセスする必要があります

while (mysqlReader5.Read())
{
// this block is getting executed while there are records
}
string result2 = mysqlReader5[0].ToString();

Usingまた、毎回接続を開いたり閉じたりするのを避けるために、ブロックを使用して for ループを内部に移動できるとよいでしょう。

于 2013-02-13T05:46:17.793 に答える
1

while を使用する代わりに、最初に の値を確認します。mysqlReader5.Read()

if (mysqlReader5.Read())
{
   string result2 = mysqlReader5[0].ToString();
}
于 2013-02-13T05:56:43.103 に答える
0

実装を変更する必要があると思います....参照用にこのリンクを試してください

http://csharp-station.com/Tutorial/AdoDotNet/Lesson04

datareader[0] は最初の列の値を返します。結果の配列へのアクセスには使用されません (そのためにはデータ テーブルを使用します)。また、データ リーダーは結果の配列を返さず、一度に 1 つの結果しかフェッチしません。 while (mysqlReader5.Read()) 内の各データを読み取る必要があります。

于 2013-02-13T05:55:27.077 に答える