friend 们,当我在 asp.net 中编写这些代码时,我得到这样的错误:
There is already an open DataReader associated with this Command which must be closed first
请帮帮我
SqlConnection con = obj.getcon();
con.Open();
SqlCommand cmd = new SqlCommand("select student_id from student_details", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
String ss=dr[0].ToString();
if (val == ss)
{
SqlCommand cmd1 = new SqlCommand("insert student_vs_testsession_details(student_id,testsession_id,testsession_status) values('" + val + "','" + Test + "','')", con);
int val1 = cmd1.ExecuteNonQuery();
}
else
{
string message = "<script language=JavaScript> alert('StudentID does not exists!'); </script>";
if (!Page.IsStartupScriptRegistered("clientScript"))
{
Page.RegisterStartupScript("clientScript", message);
}
}
}
dr.Close();
// con.Close();
}
最佳答案
您需要更改连接字符串并添加此选项
"MultipleActiveResultSets=True;"
从 SQL Server 2005 开始,有 MARS 选项。
使用 MARS,一个打开的连接可以同时服务于多个命令。
因此,例如,您的连接字符串应该是这样的
"Server=myServerAddress;" +
"Database=myDataBase;" +
"Trusted_Connection=True;" +
"MultipleActiveResultSets=true;"
在“正常”配置中,当 SqlDataReader已打开,SqlConnection 正忙于为读取器服务,无法接受其他命令。
(请参阅 SqlDataReader 链接上的备注)。
当您尝试使用同一连接发出命令时,您上面的代码会打开一个阅读器。
有一些解决方法,例如填充数据集然后循环遍历它(但对于大型数据集,这会影响性能),因此 Microsoft 的 SQL 团队引入了 MARS
关于c# - 放置多个显示错误 :There is already an open DataReader associated with this Command which must be closed first 的 sql 命令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875837/