在调用SqlCeCommand.ExecuteReader()之后如何判断我的SqlCeDataReader是否包含任何val?

时间:2013-03-22 17:58:37

标签: c# compact-framework sql-server-ce windows-ce sqldatareader

使用以下代码:

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

1 个答案:

答案 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`
        }
    }
}