错误
每当我运行以下代码时,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();
任何帮助将不胜感激。
答案 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();