[编辑] 我根据你的答案更改了我的代码。但现在我又得到了另一个错误:
处理了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();
}
答案 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。