Try / Catch не ловит - PullRequest
       25

Try / Catch не ловит

3 голосов
/ 01 июня 2011

В следующем коде я намеренно набрал "@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();
}

Ответы [ 5 ]

8 голосов
/ 01 июня 2011

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

Поставьте точку останова в операторе catch в строке MessageBox.Show, и тогда вы сможете проверить Exception.

7 голосов
/ 01 июня 2011

Попробуйте поймать SqlException

catch (SqlException ex)
{
    MessageBox.Show(ex.ToString());
}
3 голосов
/ 01 июня 2011

Попробуйте

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(); 
}` 
3 голосов
/ 01 июня 2011

вместо SqlCeException попробуйте перехватить все исключения и посмотреть, как это работает.

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

2 голосов
/ 01 июня 2011

В Visual Studio есть функция, которая позволяет вам останавливаться, если выбрасывается исключение, даже если оно перехватывается.

Просто щелкните пункт меню «Отладка», затем «Исключения», а затем столбец «Брошенный».и снимите пометку с некоторых исключений, которые вы не хотите, чтобы отладчик автоматически ломался.

...