读取器关闭时无效尝试调用Read。读卡器打开时出错

时间:2015-05-22 11:21:36

标签: sql asp.net

我有以下代码:

{
  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   读者已关闭。

任何人都可以帮助我,为什么会收到此错误

2 个答案:

答案 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();

如果你在下一个循环的循环中关闭它,你指定的错误将抛出