使用以下代码:
SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow);
itemID = myReader.GetString(0);
packSize = myReader.GetString(1);
...我得到一个例外,“行/列没有数据”
我希望它默默地“中止”而不是在这种情况下抛出异常。有没有办法在尝试分配之前先测试?
我试过这个,但没有用:
SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (null != myReader.GetString(0))
{
itemID = myReader.GetString(0);
}
if (null != myReader.GetString(1))
{
packSize = myReader.GetString(1);
}
另一种可能性是将它包装在try..catch中并“吃掉”异常,但我不知道这是否是最佳方式...
答案 0 :(得分:4)
这是因为您在获得DataReader
后没有调用Read()
方法。这并不意味着结果不包含任何数据。这意味着行不包含任何数据。
using (SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (myReader.Read()) // It returns `false` if there is no data
{
itemID = myReader.GetString(0);
packSize = myReader.GetString(1);
}
}
如果结果可能包含多行,并且您想要检查结果是否包含任何数据,请使用HasRows
:
using (SqlCeDataReader myReader = cmd.ExecuteReader())
{
if (myReader.HasRows)
{
while (myReader.Read())
{
// read values from `myReader`
}
}
}