c# - 放置多个显示错误 :There is already an open DataReader associated with this Command which must be closed first 的 sql 命令时

标签 c# asp.net sql-server asp.net-mvc

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;"

See the docs on MARS

“正常”配置中,当 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/

相关文章:

asp.net - Asp 将查询放入数组并在不刷新页面的情况下通过它

asp.net - FormsAuthentication.RedirectFromLoginPage 不起作用

c# - 如何查看.net网站版本?

c# - 我可以异步创建多个 DBConnections 吗?

c# - 如何/何时使用 json?

c# - 如何单击网页中的按钮

c# - 使用反射创建由 "Type"对象的内容表示的对象

c# - 如何在用户注册期间添加声明

sql - 如何通过ssms中的select插入值?我尝试时遇到错误

sql - 从 sql 查询返回默认记录