0

使用以下代码:

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 中并“吃掉”异常,但我不知道这是否是最好的方法......

4

1 回答 1

4

这是因为您Read()在获取DataReader. 这并不意味着结果不包含数据。这意味着该不包含任何数据。

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`
        }
    }
}
于 2013-03-22T18:14:08.810 回答