超出范围的数据集例外

问题描述:

希望这是一个简单的超出范围的数据集例外

我正在从我的数据集的一列中提取数据。由于提供了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]时,由于没有数据而出现错误,因此集合中没有行。