SqlDataReader dataReader = command.ExecuteReader()弹出窗口Form而不进入while循环

时间:2013-02-19 03:33:52

标签: c# asp.net mysql

我的连接工作正常。但是,当它运行到MysqlDataREader dataReader行时,它会显示Window Form并且不会访问while循环来获取我的数据。我正在使用dataGridView来显示我的数据库中的信息。我做错了什么?感谢

    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader= cmd.ExecuteReader();
        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["id"] + "");
            list[1].Add(dataReader["name"] + "");
            list[2].Add(dataReader["weekday"] + "");
            list[3].Add(dataReader["description"] + "");
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();
     }

1 个答案:

答案 0 :(得分:1)

命令是什么?

Read()函数使读者前进到下一条记录。如果没有返回记录,那么if将立即为假。

因此该命令很可能不会返回任何内容。你想做这样的事情(HandleRecord只是为了使代码更清洁):

if(reader.Read())
{
    // Handle first record
    HandleRecord(dataReader)
    while(reader.Read())
    {
         // Handle remaining records
         HandleRecord(dataReader)
    }
}
else
{
    // Nothing was returned, do something
}

您还想处理异常。从提供的代码看来,似乎没有try-catch-finally语句。如果我没记错的话应该是这样的:

 try
 {
     // Contact database - read/write/whatever
 }
 catch
 {
     // Display exception to user, log, whatever you need
 }
 finally
 {
     // Close database connection and other cleanup
 }