超出范围的数据集例外
问题描述:
希望这是一个简单的超出范围的数据集例外
我正在从我的数据集的一列中提取数据。由于提供了SQL查询,一个ID只会返回一个结果。所以我会认为这个结果总是在数据集的'0'行。
如果我点击我的datagrid中的第一个结果........发送ID'0'到我的第二页,然后从数据库中提取图像名称它崩溃。如果我在网格中选择第二个结果(即'1'),那很好。
这里是我的代码:
SqlConnection sqlcon = new SqlConnection(connstring);
SqlCommand sqlcmd = new SqlCommand("select pic from cds WHERE _id = '" + passedID + "'", sqlcon);
SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
DataSet ds = new DataSet();
adp.Fill(ds);
// Rows set to '0' for the first result in the dataset but crashes if the first item is selected.
object a = ds.Tables[0].Rows[0]["pic"];
string test = a.ToString();
答
添加检查,以确保您的查询检索已至少一行
if(ds.Tables[0].Rows.Count > 0)
{
object a = ds.Tables[0].Rows[0]["pic"];
string test = a.ToString();
}
else
{
Response.Write("No rows for the ID = " + passedID);
}
数据集没有行。它是包含在具有Rows属性的数据集中的DataTable,但如果您的查询失败(未找到具有所请求的ID的行),则Rows集合中的元素为零,并且您无法访问索引零。 (超出范围)
答
我会猜测问题是您要么传递错误的ID,要么传入的ID的cds
表中没有数据。
当您尝试访问Rows[0]
时,由于没有数据而出现错误,因此集合中没有行。