不能使用 SqlCeDataReader.HasRow

本文关键字:HasRow SqlCeDataReader 不能 | 更新日期: 2023-09-27 17:57:03

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

IndexOutOfRangeException被处理。

我有一个空桌子开始。奇怪。。

下面是我的代码。知道吗?

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

[编辑 - 2nd]我编辑了我的代码并使用 rdr[0] 而不是 rdr["字符串"],我收到不同的错误

"索引超出了数组的范围。"

天哪,这让我发疯了。我有绝对空的行开始,我不知道这些奇怪的错误是如何弹出的

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

不能使用 SqlCeDataReader.HasRow

去掉 HasRows if 语句。 您可以通过执行while (rdr.Read())来遍历读取器。 如果未返回任何记录,它将返回 false(跳过时)。 (至少使用SqlDataReaders)

正如消息所说,不支持HasRows。您应该可以跳过该检查。在这些情况下,也建议使用 using

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

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