Поймать ошибку SQL raise в C#
я генерирую ошибку raise в процедуре SQL:
RAISERROR('Already exist',-10,-10)
но я не могу поймать его, используя следующий код в C#
catch (SqlException ex)
{
bResult = false;
if (ex.Errors[0].Number == -10)
{
CommonTools.vAddToLog("bInsertNewUser", "ManageUsers", ex.Message);
if ((savePoint != null))
savePoint.Rollback();
}
}
Как я могу поймать поднятую ошибку в C# ?
2 ответов
RAISERRORs со значением серьезности ниже или равным 10 не пойманы на стороне C#, потому что я полагаю, что они считаются просто предупреждениями, как вы можете видеть из список на Серьезность Ошибки Ядра СУБД
значения серьезности между 11 и 16 являются ошибками, которые могут быть исправлены пользователем, поэтому, например, вы можете попробовать:
RAISERROR('Already exist',16,1)
в противном случае вы можете выбрать другой код ошибки из списка выше или, если он вам действительно нужен, подготовить собственное сообщение об ошибке с помощью процедуры sp_addmessage.
Ваш, если заявление, где вещи неудачу. Предполагая, что первая ошибка в коллекции действительно та, которую вы ищете (это может быть не так).
SqlError.Number
- это не значение, которое вы установили в RAISERROR
.
использовать SqlError.Class
чтобы получить серьезность ошибки, или SqlError.State
чтобы проверить состояние (оба -10 в вашем примере. так трудно сказать, что вы имеете в виду):
catch (SqlException ex)
{
bResult = false;
if (ex.Errors[0].Class == -10)
{
CommonTools.vAddToLog("bInsertNewUser", "ManageUsers", ex.Message);
if ((savePoint != null))
savePoint.Rollback();
}
}