문제

IDE = VS7 또는 2002

안녕하세요, 여기에 정말 이상한 문제가 있습니다. 코드는 예상대로 실행되는 것으로 보이지 않습니다. 나는 디버거를 통해 이것을 실행하고 있으며 정말 이상하게 성능을 발휘하고 있습니다.

가상 디렉토리가 ASP.NET 1.0.3705를 사용하고 있는지 확인했습니다.

코드는 뒤 따르는 것이며 디버거가 주석의 실행 단계로 표시하는 내용을 설명합니다.

try
{
    objConnection.Open();  // STARTS HERE
    objCommand.ExecuteNonQuery();  // DOES NOT THROW EXCEPTION
    int c = 0;  // THIS LINE IS EXECUTED
}
catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}
finally
{
    // EXECUTES AS EXPECTED FROM HERE ON OUT,
    // AS THOUGH THE throw sqle; DID NOT HAPPEN.
    if (objConnection.State == ConnectionState.Open) objConnection.Close();
}

이 이상한 행동을 경험 한 사람이 있습니까? 그것을 고치는 방법에 대해 아십니까? 방법을 광범위하게 변경할 수 있지만 왜 이런 일이 일어나고 있는지 알고 싶습니다.

나는 sqle이 null이기 때문에 던지기가 예상대로 행동하지 않는 이유입니다. 그러나 왜 우리는 처음 에이 코드 블록에 뛰어 들었습니까?

나는 그것을 여러 번 다시로드하고, 저장하고 재건하고, 디버거로 실행 되었고이 동작을 여러 번 보았습니다.

도와 주셔서 감사합니다!

모두 제일 좋다,

그레이엄

도움이 되었습니까?

해결책

잠깐만 .. 코드는 예외를 던지지 않으며 왜 캐치 블록을 실행하지 않는지 궁금하십니까?

편집 (의견 참조) :

정말 믿기 어려운 것 같습니다. 나는 캐치 블록 내부의 실제 예외가 무효 인 경우에 대해 들어 본 적이 없으며, 이미 언급했듯이 캐치 블록 내부의 첫 번째 줄은 실행되지 않으며, 내 의견으로는 예외가 전혀 없다는 방향을 가리 킵니다.

구식 디버깅 기술 (Debug.WriteLine)을 사용하여 디버거를 건너 뛰면 프로그램 흐름을 확인하려고 했습니까?

내 가정은 당신이 예외가 발생하는 잘못된 장소를보고 있다는 것입니다.

다른 팁

아주 이상한. 당신의 코드에서 무슨 일이 일어나고 있는지 잘 모르겠지만, 내가 본 한 가지는 다음과 같습니다.

catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}

당신은 다음을 원합니다 :

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

예외를 다시 줄입니다.

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