不能使用SqlCeDataReader.HasRow

时间:2011-05-19 13:53:24

标签: c# sql-server-ce datareader

[编辑] 我根据你的答案更改了我的代码。但现在我又得到了另一个错误:

处理了IndexOutOfRangeException。

我有一张空桌子。怪异..

以下是我的代码。有什么想法吗?

using (SqlCeDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        dg2.Items.Add(new DataItem2() { FooName = (string)rdr["FooName"],});
    }
    rdr.Close();
}

[编辑 - 第二] 我编辑了我的代码并使用rdr [0]而不是rdr [“String”],我得到了不同的错误

“索引超出了数组的范围。”

omg,这是我的疯子。我有绝对空行开始,我不知道这些奇怪的错误是如何弹出的

using (SqlCeDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        dg2.Items.Add(new DataItem2() { FooName = (string)rdr[0],});
    }
    rdr.Close();
}

3 个答案:

答案 0 :(得分:1)

删除HasRows if语句。您可以通过while (rdr.Read())遍历读者。如果没有返回记录,它将返回false(跳过while)。 (至少使用SqlDataReaders)

答案 1 :(得分:0)

如消息所示,不支持HasRows。你应该很好地跳过那张支票。在这些情况下,建议使用using

using(SqlCeDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        dg2.Items.Add(new DataItem2() { FooName = (string)rdr["FooName"] });
    }
}

答案 2 :(得分:0)

此外,如果您使用SqlCeDataReader返回聚合值(如Max()),则似乎不允许您检查null。 [如果没有行,则会发生这种情况] IsDbNull(0)引发了一个错误,所以我的解决方案只是尝试读取值并捕获将引发的System.Data.SqlTypes.SqlNullValueException。