我仍在学习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处没有行。”
答案 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