Datareader.HasRow错了

时间:2013-04-05 19:53:29

标签: c# datareader

任何人都可以确认或质疑我使用DataReader访问ACCDB数据库的问题。我设置DataReader并查询数据库。当我检查DataReader.HasRows时,无论记录是否存在,我都会成真。

我已经双重验证数据表是空的,根本没有记录,但DataReader.HasRows仍然说它有记录。

如果我继续尝试DataReader.Read,当我知道没有返回记录时,我收到错误消息“行/列没有数据。”这是预期的。

有没有人见过这个?或者你能说这不会发生吗?

由于

sql = @"SELECT a.License, a.ClassID, a.CurrentlyIn, a.TotalScans " +
    @"FROM Attendance a " +
    @"WHERE a.License = " + myScan.LicenseInt +
        @" AND a.ClassID = " + myScan.ClassID + ";";
_parent.StatusOutput(sql);

cmdDB = new OleDbCommand(sql, cnDB);
try
{
    //cnDB.Open();

    drDB = cmdDB.ExecuteReader();
    if (drDB.HasRows)
    {
        _parent.StatusOutput("Data reader has no rows");
    }
    else
    {
        _parent.StatusOutput("Data reader has rows.");
        drDB.Read();
        _parent.StatusOutput(drDB["License"].ToString() + ", " + drDB["ClassID"].ToString());
    }

我们走了。很抱歉我对如何发布此内容感到困惑。

1 个答案:

答案 0 :(得分:0)

在您的示例代码中如果读者有行,则会打印错误

并且如果读者没有行,则打印它具有和读取并抛出异常

交换:

if (drDB.HasRows)
        {
            _parent.StatusOutput("Data reader has rows.");
            drDB.Read();
            _parent.StatusOutput(drDB["License"].ToString() + ", " + drDB["ClassID"].ToString());

                   }
        else
        {
            _parent.StatusOutput("Data reader has no rows");

        }