System.IndexOutOfRangeException:位置0

时间:2017-07-23 08:57:31

标签: c# sql asp.net indexoutofrangeexception

点击登录按钮后出现以下错误:

  

位置0没有行

具体来自Image3.ImageUrl = HDT.Rows[0]["image"].ToString();行。

以下是社会表的数据库快照:

Table-Society Snapshot

这行不清楚,所以错误是什么?什么是位置0正好

以下是我遇到错误的代码块:

DS_HOUSE.HOUSE_SELECTDataTable HDT = new DS_HOUSE.HOUSE_SELECTDataTable();
DS_HOUSETableAdapters.HOUSE_SELECTTableAdapter HAdapter = new 
DS_HOUSETableAdapters.HOUSE_SELECTTableAdapter();

 protected void Page_Load(object sender, EventArgs e)
{
   UDT = UAdapter.Select_By_UID(Convert.ToInt32(Session["uid"].ToString()));
   HDT = HAdapter.Select_By_SNAME_BLOCKNO(UDT.Rows[0]["societyname"].ToString(), Convert.ToInt32(UDT.Rows[0]["Houseid"].ToString()));
   Image3.ImageUrl = HDT.Rows[0]["image"].ToString();
   lblsname.Text = HDT.Rows[0]["sname"].ToString();
   lblbno.Text = HDT.Rows[0]["blockno"].ToString();
   lbltype.Text = HDT.Rows[0]["type"].ToString();
   ViewState["HID"] = HDT.Rows[0]["HID"].ToString();
}

此外,我尝试将代码放在if块中

       protected void Page_Load(object sender, EventArgs e)
   {
         if (HDT.Rows.Count > 0)
    {
        lblsell.Text = "";
        UDT = UAdapter.Select_By_UID(Convert.ToInt32(Session["uid"].ToString()));
        HDT = HAdapter.Select_By_SNAME_BLOCKNO(UDT.Rows[0]["societyname"].ToString(), Convert.ToInt32(UDT.Rows[0]["Houseid"].ToString()));

        {
            Image3.ImageUrl = HDT.Rows[0]["image"].ToString();
            lblsname.Text = HDT.Rows[0]["sname"].ToString();
            lblbno.Text = HDT.Rows[0]["blockno"].ToString();
            lbltype.Text = HDT.Rows[0]["type"].ToString();
            ViewState["HID"] = HDT.Rows[0]["HID"].ToString();
        }
    }
}

我能够登录但是我无法从社会表中检索细节。

Snapshot of Society details not being retrieved

2 个答案:

答案 0 :(得分:0)

在以下行放置一个断点并进行调试:

Image3.ImageUrl = HDT.Rows[0]["image"].ToString(); 

然后,当断点高于线路时,快速观察 HDT 的值。

此外,if check if (HDT.Rows.Count > 0)应位于Image3.ImageUrl = HDT.Rows[0]["image"].ToString();

的正上方

填充 HDT 后,就是这样。

看起来 HDT 本身并未填充。

答案 1 :(得分:0)

从您的描述可以明显看出HDT不为空,但HTD.Rows是一个空集合,因此元素0不存在。