If条件下的数据集

时间:2010-09-02 14:13:12

标签: c# asp.net

我仍在学习Asp.Net。我有个问题 。我正在使用if条件来检查数据集值。每当检查条件时,它都会抛出异常,因为数据集没有任何值。如何克服这一点。  代码是:

DataSet ds = merchant.getIsactiveIsconfirmedforcancelaccount(merchantID);

if (_merchant.PackageID == (int)CommonHelper.Package.Free && _merchant.AccountStatus.Contains("Awaiting"))
        {
            spnMerchantActiveStatus.InnerHtml = ApplicationData.MSG_AWAITING_CONFIRMATION;
        }
        ***else if ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && (ds.Tables[0].Rows[0]["Active"]).ToString() == "N")***
        {
             _merchant.AccountStatus = "Cancelled";
             spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus;

        }

        else if(_merchant.PackageID != (int)CommonHelper.Package.Free && ds1.Tables[0].Rows.Count == 0 && (ds2.Tables[0].Rows[0]["ConfirmationSrc"]).ToString() == "Admin")
        {
             _merchant.AccountStatus = "Free Trial";
             spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus;
        }
        else
            spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus;
    }

此处的例外情况是“位置0处没有行。”

3 个答案:

答案 0 :(得分:0)

好像你的表[0]中没有任何行。您可以添加检查条件是行> 0然后继续IF中的其他条件。

答案 1 :(得分:0)

您假设数据集中有行。

而不是

if ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" &&
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N")
你应该做点什么

if ((ds.Tables[0].Rows.Count() > 0) &&
(ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" &&
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N")

但是你真的需要进行更全面的错误检查,而不仅仅是一个条件影响你现在。

编辑:如果上述原因不明显,请阅读逻辑运算符的短路:http://msdn.microsoft.com/en-us/library/2a723cdk(VS.71).aspx

答案 2 :(得分:0)

尝试更改您的其他声明:

   else if (
(ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && 
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N")  
    { 
    _merchant.AccountStatus = "Cancelled"; spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus;
    }

if ((null != ds.Tables[0]) && ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True") && ((ds.Tables[0].Rows[0]["Active"]).ToString() == "N"))

因此,在检查数据集之前,请检查数据集是否为空。

或(如其他海报所说)检查您实际上是否有数据集中的行。

ds.Tables[0].Rows.Count() != 0