2013-10-23 4 views
0

매우 간단한 질문입니다. 아래 코드를 기반으로 알고 싶습니다. 연결이 닫히고 반환 평가가 실행되거나 반환 평가가 실행됩니다. 연결을 닫지 않고 실행될 수 있습니까? .. 왜냐하면 나는 CommandBehavior을 연결을 닫도록 설정했기 때문에 연결은 전혀 닫히지 않을 것이라고 생각합니다. 그렇습니까?반환 닫기 연결 명령 동작을 사용하여 독자 결과를 실행합니다. 예외 코드

using (var con = new SqlConnection(_constr)) 
     { 
      con.Open(); 
      var cmd = new SqlCommand(cmdstr, con); 
      var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
      if (reader.Read()) 
       return Convert.ToInt32(reader["persianDate"].ToString()); 
     } 

답변

3

연결된DataReader 개체가 닫힐 때 연결된 Connection 개체가 닫힙니다.

이없는 연결을 닫습니다 CommandBehavior.CloseConnection하지만 using 블록을 사용하여 영향을 미치고있다 반환하기 전에 데이터 판독기를 폐쇄되지 않기 때문에.

내가 모두 SqlCommandReader뿐만 아니라

using (var con = new SqlConnection(_constr)) 
using (var cmd = new SqlCommand(cmdstr, con)) 
{ 
    con.Open(); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     if (reader.Read()) 
      return Convert.ToInt32(reader["persianDate"].ToString()); 
    } 
} 
에 대한 using 블록을 추가 할 수

1

닫힙니다. DisposeSqlConnection에 호출하면 암시 적으로 Close이 호출되고 using 문을 사용하기 때문에 Dispose은 항상 블록의 끝에서 호출됩니다.