Пользовательские сообщения об исключении С#

Как мне настроить собственное сообщение об ошибке на основе какой ошибки?

protected void btnNew_Click(object sender, EventArgs e) { Clear(); SqlCommand command = conn.CreateCommand(); SqlDataReader reader; try { command.CommandText = "GetMax"; command.CommandType = CommandType.StoredProcedure; conn.Open(); reader = command.ExecuteReader(); while (reader.HasRows) { while (reader.Read()) { int CustMax = reader.GetInt32(0); CustMax++; txtCustID.Text = CustMax.ToString(); } reader.NextResult(); } reader.Dispose(); } catch (SqlException ex) { lblMessage.Text = ex.Message; } finally { command.Dispose(); conn.Dispose(); } }

В этом блоке кода, если обнаружено исключение SqlException, это сообщение отображается в lblMessage.

Главное, на что я смотрю, - это соединение с базой данных или нет. Если этого не произошло, это приводит к следующей ошибке "При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не был найден или недоступен. Убедитесь, что имя экземпляра верное и что SQL Server настроен на разрешение удаленных подключений (поставщик: поставщик именованных труб, ошибка: 40 - Не удалось открыть соединение с SQL Server) ".

Если возникает ошибка 40, я хочу установить lblMessage в "Невозможно подключиться к базе данных", но если возникает другое SqlException, оно должно опубликовать полное сообщение об ошибке.

2 ответа

Вот как вы справляетесь,

catch (SqlException ex) { if(ex.Number == 40 ) // or Use whatever the number it returns for the relevant error { MessageBox.Show("Relevant SQL Error Occured"); } else { MessageBox.Show("None Relevant SQL Error Occured:" + ex.toString()); } } catch(Exception ex)// All other non sql errors { MessageBox.Show(ex.toString()); }

Взгляните на эту технику обработки ошибок MSDN для получения дополнительной информации. Link


Вы можете изменить свой код, как

catch (SqlException ex) { if(ex.Number == 40) // 40 is specific key for network issue { lblMessage.Text = "Cannot connect to database" } else { lblMessage.Text = ex.Message; } }

Существует еще один способ добиться такой же

catch ((SqlException ex) {
if (ex.Message.Contains("A network-related or instance-specific error specific"))//Put the matching text here
{ lblMessage.Text = "Cannot connect to database"
}
else { lblMessage.Text = ex.Message; } }

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

licensed under cc by-sa 3.0 with attribution.