Как манипулировать сообщением SqlException в удобном для пользователя сообщении - PullRequest
4 голосов
/ 30 октября 2011

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

Оператор UPDATE конфликтует с ограничением FOREIGN KEY "FK_Parameter_Status».Конфликт произошел в базе данных «LIMS», таблице «dbo.Status», столбце «StatusId».

Оператор% ls вступил в конфликт с ограничением% ls «%. * Ls».Конфликт произошел в базе данных "%. * Ls", таблица "%. * Ls"% ls%. * Ls% ls.

Я могу наблюдать

%ls isзаменяется на UPDATE, FOREIGN KEY и т. д.

В C # я получу сообщение об ошибке, из которого я хочу извлечь детали, замененные SQL Server.Я буду поддерживать SqlErrors в своей библиотеке и заменю их пользовательскими сообщениями.

Пользовательское сообщение, которое я хочу отобразить, например.

string.Format("{0} failed!, incorrect value was supplied for {1} field", "UPDATE", "Status")

1 Ответ

2 голосов
/ 30 октября 2011

SQLException имеет свойство Number , вы можете использовать этот номер и затем преобразовать его в любой текст.

public static string GetSqlExceptionMessage(int number)
{
  //set default value which is the generic exception message
  string error = MyConfiguration.Texts.GetString(ExceptionKeys.DalExceptionOccured);   
  switch (number)
  {
    case 4060:
      // Invalid Database
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFailedToConnectToTheDB);   
    break;
    case 18456:
      // Login Failed
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFailedToLogin);   
    break;
    case 547:
      // ForeignKey Violation
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFKViolation);   
    break;
    case 2627:
      // Unique Index/Constriant Violation
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalUniqueConstraintViolation);
    break;
    case 2601:
      // Unique Index/Constriant Violation
      error =MyConfiguration.Texts.GetString(ExceptionKeys.DalUniqueConstraintViolation);   
    break;
    default:
      // throw a general DAL Exception
      MyConfiguration.Texts.GetString(ExceptionKeys.DalExceptionOccured);   
    break;
  }

  return error;
}

Пример копирования кода из: Получение сообщений, дружественных SqlException, используяНомер ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...