2014-09-26 2 views
0

나는이 기능을 가지고 :내 열린 DataReader는 어디에 있습니까?

public void Change_Reservation(string pDataAreaId, string pSalesId, string pCustNum, string pNom, SqlConnection Conn) 
    { 
     try 
     { 
      ADV_CdeRAVCollection myColl = new ADV_CdeRAVCollection(); 
      using (SqlCommand Com = Conn.CreateCommand()) 
      { 
       Com.CommandText = ADV_CdeRAV._SQL_Select_If_Reserve; 
       Com.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
       using (SqlDataReader rs = Com.ExecuteReader()) 
       { 
        while (rs.Read()) 
        { 
         ADV_CdeRAV myObj = new ADV_CdeRAV(); 
         myObj.AddFromRecordSet_SelectRAV(rs); 
         if (myObj.Nom == null) 
         { 
          res = "null to nom"; 
         } 
         else if (myObj.Nom.Trim() == pNom) 
         { 
          res = "nom to null"; 
         } 
         myColl.Add(myObj); 
        } 
        Com.Dispose(); 
        rs.Close(); 
        rs.Dispose(); 
       } 
      } 

      if (res == "nom to null") 
      { 
       //UPDATE NOM TO NULL 
       using (SqlCommand Com2 = Conn.CreateCommand()) 
       { 
        Com2.CommandText = ADV_CdeRAV._SQL_Update_Nom_To_Null; 
        Com2.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
        Com2.ExecuteReader(); 
        Com2.Dispose(); 
       } 
      } 
      else if (res == "null to nom") 
      { 
       //UPDATE NULL TO NOM 
       using (SqlCommand Com3 = Conn.CreateCommand()) 
       { 
        Com3.CommandText = ADV_CdeRAV._SQL_Update_Null_To_Nom; 
        Com3.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
        Com3.ExecuteReader(); 
        Com3.Dispose(); 
       } 
      } 
      if (myColl.Count == 0) 
      { 
       //INSERT 
       using (SqlCommand Com4 = Conn.CreateCommand()) 
       { 
        Com4.CommandText = ADV_CdeRAV._SQL_Insert_Reservation; 
        Com4.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
        Com4.ExecuteReader(); 
        Com4.Dispose(); 
       } 
      } 
     } 
     catch (System.Exception) 
     { 
      throw; 
     } 
    } 

을하지만 너무이 오류가 발생했습니다 :

는 "이미이 명령과 관련된 열린 DataReader가 있습니다."

그러나 내 코드 (rs)의 DataReader는 "사용 중"블록에서 사용되므로 열어 둘 수 없습니다. "using"블록을 사용하고 MARS를 true로 설정합니다. 그러나이 문제를 해결할 수 없으며 C#/ASP.NET을 처음 사용합니다.

+0

'using' 블록 안에'rs'를 사용하십시오. –

+0

정확히 어떤 줄에? _using 문을 사용할 때'.Dispose()'메소드를 사용할 필요가 없습니다. 문을 사용하여 이것을 처리합니다. –

답변

2

시도해 보겠습니다. 삽입 및 업데이트를 위해 ExecuteReader 대신 ExecuteNonQuery를 사용하면 어떻습니까? ** 아래 코드를 살펴보십시오.

결과를 알려주십시오.

public void Change_Reservation(string pDataAreaId, string pSalesId, string pCustNum, string pNom, SqlConnection Conn) 
     { 
      try 
      { 
       ADV_CdeRAVCollection myColl = new ADV_CdeRAVCollection(); 
       using (SqlCommand Com = Conn.CreateCommand()) 
       { 
        Com.CommandText = ADV_CdeRAV._SQL_Select_If_Reserve; 
        Com.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
        using (SqlDataReader rs = Com.ExecuteReader()) 
        { 
         while (rs.Read()) 
         { 
          ADV_CdeRAV myObj = new ADV_CdeRAV(); 
          myObj.AddFromRecordSet_SelectRAV(rs); 
          if (myObj.Nom == null) 
          { 
           res = "null to nom"; 
          } 
          else if (myObj.Nom.Trim() == pNom) 
          { 
           res = "nom to null"; 
          } 
          myColl.Add(myObj); 
         } 
         Com.Dispose(); 
         rs.Close(); 
         rs.Dispose(); 
        } 
       } 

       if (res == "nom to null") 
       { 
        //UPDATE NOM TO NULL 
        using (SqlCommand Com2 = Conn.CreateCommand()) 
        { 
         Com2.CommandText = ADV_CdeRAV._SQL_Update_Nom_To_Null; 
         Com2.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
         **Com2.ExecuteNonQuery();** 
         Com2.Dispose(); 
        } 
       } 
       else if (res == "null to nom") 
       { 
        //UPDATE NULL TO NOM 
        using (SqlCommand Com3 = Conn.CreateCommand()) 
        { 
         Com3.CommandText = ADV_CdeRAV._SQL_Update_Null_To_Nom; 
         Com3.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
         **Com3.ExecuteNonQuery();** 
         Com3.Dispose(); 
        } 
       } 
       if (myColl.Count == 0) 
       { 
        //INSERT 
        using (SqlCommand Com4 = Conn.CreateCommand()) 
        { 
         Com4.CommandText = ADV_CdeRAV._SQL_Insert_Reservation; 
         Com4.Parameters.AddWithValue("@DataAreaId", pDataAreaId); 
         **Com4.ExecuteNonQuery();** 
         Com4.Dispose(); 
        } 
       } 
      } 
      catch (System.Exception) 
      { 
       throw; 
      } 
     } 
+0

오 감사합니다! 내 하루를 구 했으니, 이제는 매력처럼 작동합니다. – Phobie

+0

감사합니다. 이 소식을 다른 사람에게 유용하게 사용하려면 답변으로 표시해주세요. – Hatjhie

+0

3 분 정도 기다려야합니다. ;) – Phobie