0

在我的项目中,我从数据库中检索一些详细信息,将其存储在 Dataset 中并在 IF 条件下检查它,我将断点放在 IF 条件行中并执行它以检查它是否正确运行,条件失败(即那里我在数据可视化器中看到的数据集中也没有行)但它正在移动到 IF 块并且引发索引异常它 可能是什么错误,

我的代码是,

string mac = GetMac();
DataSet dr = Namespace.SP.Storedprocedure(mac).GetDataSet();
DataSet ds = Namespace.SP.Storedprocedure(mac).GetDataSet();
try
{
    if (dr.Tables[0].Rows.Count > 0 || dr.Tables[0].Rows.Count <= 3)
    {
        string date = dr.Tables[0].Rows[0]["Date"].ToString();
        if (Convert.ToInt32(dr.Tables[0].Rows[0]["CID"]) != Convert.ToInt32(Session["CollegeID"]))
        {
            Messaging("This System is already Registered Under Different College.");
            getdet.Enabled = false;
            Register1.Enabled = false;
        }
        else if (dr.Tables[0].Rows[0]["Mac_id"].ToString() == mac)
        {
            Messaging("This System has been Already Registered for Delivery on " + date);
            getdet.Enabled = false;
            Register1.Enabled = false;
        }

    }
    else
    {
        Messaging("The Allowed Maximum Number of Systems has been Registered... ");
    }
    if (getdet.Enabled == false && Register1.Enabled == false && ds.Tables[0].Rows.Count > 0)
    {

        if (ds.Tables[0].Rows[0]["Mac_id"] != mac)
        {
            getdet.Enabled = true;
            Register1.Enabled = true;
        }
    }
    ggvqpdetail.Visible = true;
    fillgridQP();
    foreach (GridViewRow gr in ggvdetail.Rows)
    {
        Anthem.Label lb = (Anthem.Label)gr.FindControl("lbl1");
        lb.Text = "Downloading";
        break;
    }
}
catch(Exception ex)
{
    lbltxt.Text = ex.Message;
}
4

3 回答 3

4

如果 Rows.Count 为零,则此行始终为 true

 if (dr.Tables[0].Rows.Count > 0 || dr.Tables[0].Rows.Count <= 3)

逻辑运算符对第OR一个条件给出 false,但对第二个条件给出 true,因此整个表达式为TRUE

可能您需要一个AND逻辑运算符

 if (dr.Tables[0].Rows.Count > 0 && dr.Tables[0].Rows.Count <= 3)

但在此行之前,您需要检查行数为零并采取适当的措施

 if (dr.Tables[0].Rows.Count == 0)
 {
      // Operations for rows count == 0
 }
 else if(dr.Tables[0].Rows.Count <= 3)
 {
      // Operations for rows count <= 3
 } 
 else
 {
      // limits reached.....
 }
于 2013-06-17T09:49:46.777 回答
1

你的第一个 if 语句出错了,如果你想满足条件,那么你必须使用AND而不是 OR 以便在两个条件都满足之后,你可以输入 if 块的内部代码

 if (dr.Tables[0].Rows.Count > 0 && dr.Tables[0].Rows.Count <= 3)
于 2013-06-17T09:52:40.960 回答
1

你应该写

 if (dr.Tables[0].Rows.Count > 0 || ((dr.Tables[0].Rows.Count <= 3) && (dr.Tables[0].Rows.Count >0)))

在您的 dr.Tables[0] 中可能没有来自数据库的行,因此您应该验证它的行数。

于 2013-06-17T09:53:21.820 回答