4

我启用了 MARS,但仍然无法在一个连接中执行两个 SqlDataReader,我使用 RegEdit 搜索了默认启用 MARS 的解决方案,但找不到任何解决方案,但仍然出现该错误:已经有一个与此命令关联的打开 DataReader,必须关闭第一的。

这是代码:

public partial class student_Courses : System.Web.UI.Page
{
    string connectionString = "";
    string query1 = "";
    string query2 = "";
    string courseName = "";
    string chapterName = "";
    string chapterVideoName = "";
    string courseValue = "";
    SqlDataReader sr2 = null;

    protected void Page_Load(object sender, EventArgs e)
    {
        query1 = "SELECT * FROM Courses";
        query2 = "SELECT * FROM Chapters WHERE value='" + courseValue + "'";
        connectionString = "Data Source=Prince-PC;" + 
                            "Initial Catalog=Elearning;" + 
                            "Integrated Security=True;"+ 
                            "MultipleActiveResultSets=True";
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand command1 = new SqlCommand(query1, con);
        SqlCommand command2 = new SqlCommand(query2, con);
        if (con.State == ConnectionState.Closed)
            con.Open();

        using (SqlDataReader sr1 = command1.ExecuteReader())
        {
            while (sr1.Read())
            {
                courseName = sr1["name"].ToString();
                courseValue = sr1["value"].ToString();
                sr2 = command2.ExecuteReader();
                while (sr2.Read())
                {
                    chapterName = TextBox3.Text =  sr2["name"].ToString();
                    chapterVideoName = Label2.Text =  sr2["video_name"].ToString();
                }
            }
        }
        con.Close();
    }
}
4

1 回答 1

4

您需要通过此 MSDN MARS 示例sr2中的using语句进行处理

// The following line of code requires
// a MARS-enabled connection.
productReader = productCmd.ExecuteReader();
using (productReader)
{
  while (productReader.Read())
  {
    Console.WriteLine("  " +
      productReader["Name"].ToString());
  }
}
于 2012-04-25T19:09:47.483 回答