Обработка исключений - строка пропущена, а sqle пуст - PullRequest
0 голосов
/ 15 мая 2009

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, поэтому бросок не работает должным образом. Но почему мы прыгнули в этот блок кода в первую очередь?

Я перезагружал его несколько раз, сохранял и перестраивал, выполнял с помощью отладчика и несколько раз наблюдал за этим поведением.

Спасибо всем за помощь!

Всего наилучшего,

Graham

Ответы [ 2 ]

1 голос
/ 15 мая 2009

Очень странно. Я не уверен, что происходит с вашим кодом, но я увидел одну вещь:

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; 
}

Чтобы повторно выдать исключение.

0 голосов
/ 15 мая 2009

Подождите ... ваш код не выдает исключение, и вам интересно, почему он не выполняет блок catch?

РЕДАКТИРОВАТЬ (ссылаясь на ваш комментарий):

В это действительно трудно поверить. Я никогда не слышал о случае, когда фактическое исключение внутри блока catch было нулевым, и, как вы уже упоминали, первая строка внутри блока catch не выполнялась, что, по моему мнению, указывает на то, что исключения вообще не было.

Вы пытались проверить ход программы, используя устаревшие методы отладки (Debug.WriteLine) и пропуская отладчик?

Я предполагаю, что вы смотрите не в том месте, где выдается исключение ... или вообще нет исключения.

...