我有以下代码:
{
c = Request.QueryString["city"];
SqlConnection objConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand objCmd2;
SqlDataReader objRdr2;
// String strCmd2;
objConn2.Open();
objCmd2 = new SqlCommand("SELECT * FROM subject_details WHERE Roll_no = " +"'" + c + "'", objConn2);
objRdr2 = objCmd2.ExecuteReader();
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
}
此代码工作正常,突然我收到了错误:
System.InvalidOperationException:无效尝试调用Read when when 读者已关闭。
任何人都可以帮助我,为什么会收到此错误
答案 0 :(得分:4)
Close()
应该在while
循环之后,如下所示
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
}
objRdr2.Close();
objConn2.Close();
但上面的代码设置为Label122.InnerText
查询的最后一个值。因此,您应该将TOP 1
添加到查询
objCmd2 = new SqlCommand("SELECT TOP 1* FROM subject_details WHERE Roll_no = " +
"'" + c + "'", objConn2);
然后在Label122.InnerText
中将是您查询的第一个值。您也可以删除while
循环,如下所示
objRdr2.Read();
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
然后在Label122.InnerText
中也将是查询中的第一个值。
答案 1 :(得分:2)
你要从while循环中删除objRdr2.Close();
它应该在while循环之后
如下所示
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objConn2.Close();
}
objRdr2.Close();
如果你在下一个循环的循环中关闭它,你指定的错误将抛出