ASP.NET,SqlDataReader的和的SqlCommand(已经有一个用此命令,必须先关闭相关联的打开的DataReader)

问题描述:

我得到这个错误:ASP.NET,SqlDataReader的和的SqlCommand(已经有一个用此命令,必须先关闭相关联的打开的DataReader)

There is already an open DataReader associated with this Command which must be closed first.

我不知道问题出在哪里。它已关闭,但仍然表示它是开放的。请帮忙!

第一个命令是让所有员工在两个日期之间休假。

第二个命令我用它通过ID检索日期。

这里是我的代码:

using (SqlConnection con = new SqlConnection(connection)) 
{ 
    con.Open(); 

    SqlCommand cmd = new SqlCommand(" SELECT distinct E.EmployeeId, E.FirstName FROM Employee E INNER JOIN Vacation V ON E.EmployeeId = V.EmployeeId " + 
            " WHERE ((V.Dates >= @Start AND V.Dates <= @End)) ", con); 
    cmd.Parameters.AddWithValue("@Start", (Calendar1.SelectedDates[0]).Date.ToShortDateString()); 
    cmd.Parameters.AddWithValue("@End", (Calendar1.SelectedDates[Calendar1.SelectedDates.Count - 1]).Date.ToShortDateString()); 

    using (SqlDataReader dr = cmd.ExecuteReader()) 
    { 
     while (dr.Read()) 
     { 
      Response.Write((dr[1]).ToString() + " "); // Check if retrieves employee name 
      // Now by Id I want to get all dates belong to specific employee 
      SqlCommand cmd2 = new SqlCommand("SELECT V.Dates FROM Vacation V " + 
               " WHERE ((V.Dates >= @Start AND V.Dates <= @End)) ", con); 
      cmd2.Parameters.AddWithValue("@Start", (Calendar1.SelectedDates[0]).Date.ToShortDateString()); 
      cmd2.Parameters.AddWithValue("@End", (Calendar1.SelectedDates[Calendar1.SelectedDates.Count - 1]).Date.ToShortDateString()); 
      cmd2.Parameters.AddWithValue("@EmployeeId", Convert.ToInt32(dr[0]));          

      using (SqlDataReader dr2 = cmd2.ExecuteReader()) 
      { 
       while (dr2.Read()) 
       { 
         Response.Write(Convert.ToDateTime(dr2[0])); 
       } 
      } 

      Response.Write("<br/>"); 
     } 

     GridView7.DataSource = cmd.ExecuteReader(); 
     GridView7.DataBind(); 
    } 
    con.close(); 
} 

添加到您的连接字符串:

MultipleActiveResultSets=True 
+0

感谢您respons但你在我的webconfig是什么意思?它说它不允许。 –

+0

是的,将它添加到连接字符串。例如, JYA

+0

我发现了这个问题。 gridView是第一个sqlconnection内部的。当我把它移到外面的时候,每一个Think都应该如此工作。再次感谢你。 –