位置0异常没有行

时间:2013-06-17 09:47:18

标签: c# sql-server

在我的项目中,我从DB中检索一些细节,将其存储在数据集中并在IF条件下进行检查,我已将断点放在IF条件行中并执行它以检查它是否正确运行,条件失败(即我在Data Visualizer中看到的数据集中没有行)但它正在进入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;
}

3 个答案:

答案 0 :(得分: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.....
 }

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

你应该写

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

在你的dr.Tables [0]中可能没有来自数据库的行,所以你应该对行数进行验证。