#c# #winforms #exception #try-catch
#c# #winforms #исключение #try-catch
Вопрос:
В следующем коде я намеренно ошибочно ввожу «@FooData» в «@foo111Data», чтобы проверить, перехватывает ли оператор try мое исключение. Смотрите приведенный ниже код. Но инструкция try / catch не перехватила и не отобразила исключение в MessageBox, и VS2010 просто прерывает работу и выделяет строку неправильного кода.
try
{
conn.Open();
cmd.Parameters.AddWithValue("@foo111Data", dataStrTb1.Text);
cmd.ExecuteNonQuery();
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}
Комментарии:
1. Какого типа генерируется исключение?
2. Я думаю, что вы работаете в режиме отладки, я думаю, это будет нормально работать в режиме перезагрузки.
3. Вы уверены, что
SqlCeException
(или любое другое) исключение должно быть сгенерировано? Вместо этого вы могли бы попробовать сSystem.Exception
.
Ответ №1:
Возможно, генерируется исключение другого типа? Я бы посоветовал вам изменить catch
так, чтобы он просто улавливал общий Exception
, и посмотреть, выдает ли он другой тип.
Поставьте точку останова в catch
инструкции, в MessageBox.Show
строке, и тогда вы сможете проверить Exception
.
Ответ №2:
Попробуйте перехватить SQLException
catch (SqlException ex)
{
MessageBox.Show(ex.ToString());
}
Ответ №3:
вместо исключения SqlCeException попробуйте перехватить все исключения и посмотреть, как это работает.
Я бы на самом деле использовал регистратор, а не просто messagebox, как вы делаете сейчас.
Ответ №4:
Попробуйте
try
{
conn.Open();
cmd.Parameters.AddWithValue("@foo111Data", `dataStrTb1.Text);
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
MessageBox.Show(ex.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}`
Комментарии:
1. если бы действительно нужно было написать другой пример, я бы также использовал блок Using вокруг соединения и отслеживал ex.Message вместо ex. toString() … 🙂
2. Моя идея заключалась в том, чтобы перехватить исключение, чтобы ни одно исключение не было не перехвачено. Извините, если вы возражаете против этого 🙂
Ответ №5:
В Visual Studio есть функция, которая позволяет вам останавливаться при возникновении исключения, даже если оно перехватывается.
Просто нажмите на меню отладки, затем на Исключения, затем на столбец «выброшено» и снимите пометки с определенных исключений, которые вы не хотите, чтобы отладчик автоматически прерывал работу.