Rae*_*leh 23 c# sql-server raiserror
我在SQL过程中生成raise错误:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何捕获C#中引发的错误?
Ste*_*eve 52
严重性值小于或等于10的RAISERROR未在C#端捕获,因为我认为它们仅被视为警告,您可以从数据库引擎错误严重性的列表中看到
11到16之间的严重性值是用户可以纠正的错误,因此,例如,您可以尝试:
RAISERROR('Already exist',16,1)
Run Code Online (Sandbox Code Playgroud)
否则,您可以从上面的列表中选择另一个错误代码,或者,如果您确实需要,请使用sp_addmessage准备您自己的自定义错误消息.
你的if语句是失败的地方.假设集合中的第一个错误确实是您正在寻找的错误(可能不是).
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30622 次 |
| 最近记录: |