错误 - System.InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭它

时间:2015-02-11 12:40:15

标签: c# asp.net sql-server-2008

错误

  

System.InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭

每当我运行以下代码时,

就会出现

            string btnString = @"SELECT FacultyName, Office, Phone, College, Title, Email FROM FACULTY WHERE FacultyName LIKE @name";

            SqlCommand sc = new SqlCommand();
            SqlDataReader sr;

            sc.Connection = (SqlConnection)Application["sqlConn"];
            sc.CommandType = CommandType.Text;
            sc.CommandText = btnString;
            sc.Parameters.Add("@name", SqlDbType.Char).Value = ddlFacultyName.Text;
            string strName = ShowFaculty(ddlFacultyName.Text);
            sr = sc.ExecuteReader();

            if (sr.HasRows == true)
                FillFacultyReader(sr);
            else
                Response.Write("<script>alert('No match found!')</script>");

            sr.Close();
            sc.Dispose();

错误显示在

sr = sc.ExecuteReader(); 

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

最好像这样改变你的代码

using(SqlConnection con=new SqlConnection("constr"))
{
  using(SqlCommand com=new SqlCommand ("sp",con))
  {


  }

}

答案 1 :(得分:0)

你可以分享你的整个方法吗,我认为你在使用这个代码块时,foreach或重复。还有一件事,你是否在命令“sc.ExecuteReader()”之前打开了连接。最有可能你使用重复然后你得到这个错误。如果您发布整个方法,我可以尝试提供更多帮助。

答案 2 :(得分:0)

当您已经使用此代码上方的相同连接打开dataAdapter或executeScalar时,会发生这种情况。有两种选择: 1.将此代码放在dataAdapter代码块上方并将其保存在单独的

try 
{
conn.open(); 
//Your code here

}
catch (Exception ex)
{
//exception handling
}
finally
{
conn.close(); 
}

或如Ganesh_Devlekar所述。还记得关闭DataReader 2.在另一个sqlConnection类型中定义相同的连接。那是: 如果你有像

这样的连接
SqlConnection conn  = New SqlConnection("your_connectionString");
//create another SqlConection variable
SqlConnection conn1  = New SqlConnection("your_connectionString");
//Use Conn1 for SqlDataReader

答案 3 :(得分:0)

您是否尝试将 MultipleActiveResultSets = true; 添加到您的连接字符串中,如下所示?

<add name="EFDbContext" providerName="System.Data.SqlClient" connectionString="Data Source=XXXX;
Initial Catalog=XXXX; Integrated Security=True; MultipleActiveResultSets=True;" />


<强>更新 在您的情况下,您可能还尝试通过在sr.Close()之后添加此行来关闭连接;行:

sc.Connection.Close();