문제

이 문장에서 :

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

예외의 경우 밀접하게 연결됩니까?

도움이 되었습니까?

해결책

명령이 잘못 될 수있는 방법에는 여러 가지가 있습니다.

궁극적으로 데이터 리더의 밀접한 방법은 연결을 닫을 것이며, 이전에는 아무런 문제가 없었습니다.

Executereader 또는 해당 호출 된 메소드 내부에서 발생하는 예외가있는 경우 실제 DataReader 객체가 구성되기 전에 연결이 닫히지 않습니다.

예외의 경우 연결을 닫는 것을 신뢰하지 않습니다.

다른 팁

"정상적인"쿼리를하는 가장 안전한 방법은

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "...";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // ...
            }
        }
    }
}

예외는이 코드 외부에서 잡힐 수 있습니다.

예외가 어디에서 발생하는지에 따라 다릅니다!

시도를 올바르게 구조화하면 괜찮을 것입니다.

예를 들어:

SqlCommand myCommand = new SqlCommand();

try
{
   myCommand.dostuff();
}
catch(Exception ex)
{
  // display error message
}
finally
{
  myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}

라인 : mycommand.executereader (CommandBehavior.closeConnection)가 실패하면 (아마도 데이터베이스가 줄어들 었습니까?) 연결을 프로그래밍 방식으로 닫을 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top