Как манипулировать сообщением SqlException в удобном для пользователя сообщении
Я хочу получить все замененные значения в следующем исключении из сообщения об ошибке, полученного в пользовательском интерфейсе, для отображения настраиваемого сообщения до уровня детализации
Оператор UPDATE конфликтовал с ограничением FOREIGN KEY "FK_Parameter_Status". Конфликт произошел в базе данных "LIMS", таблице "dbo.Status", столбце "StatusId".
Оператор% ls вступил в конфликт с ограничением% ls "%.* Ls". Конфликт произошел в базе данных "%.* Ls", таблица "%.* Ls"%ls%.* Ls% ls.
Я могу наблюдать
%ls
заменяется UPDATE
, FOREIGN KEY
и т.п.
В C# я получу сообщение об ошибке, из которого я хочу извлечь части, замененные SQL Server. Я буду поддерживать SqlErrors
в моей библиотеке и заменит их пользовательскими сообщениями.
Пользовательское сообщение, которое я хочу отобразить, например.
string.Format("{0} failed!, incorrect value was supplied for {1} field", "UPDATE", "Status")
1 ответ
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, используя его номер ошибки