Обработка исключений – строка пропущена, а sqle имеет значение null

StackOverflow https://stackoverflow.com/questions/869579

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

Грэм

Это было полезно?

Решение

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

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

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

Пробовали ли вы проверить ход выполнения программы, используя устаревшие методы отладки (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