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] 返回第一列值。它不用于访问结果数组(使用数据表)。数据读取器不返回结果数组,它一次只获取一个结果。所以你需要读取while内的每个数据(mysqlReader5.Read())。希望对您有帮助!!!!

于 2013-02-13T05:55:27.077 回答