1

我的连接工作正常。但是,当它运行到 MysqlDataREader dataReader 行时,它会显示窗口窗体并且不会访问 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();
     }
4

1 回答 1

1

命令是什么?

Read() 函数将读取器推进到下一条记录。如果没有返回记录,则 if 将立即为 false。

因此该命令很可能不会返回任何内容。你想做这样的事情(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
 }
于 2013-02-19T04:19:15.753 回答