gpt4 book ai didi

c# - 如何使用 Dapper 获取用户定义的 SQLException 编号

转载 作者:行者123 更新时间:2023-11-30 12:55:08 24 4
gpt4 key购买 nike

我的存储过程抛出自定义错误以处理多用户网络应用程序中的验证。这在 SQL Server 中按预期工作,返回错误号 50001,但是当我的 C# 代码捕获错误时,它总是有错误号 50000 而不是 50001,因此我不能以不同的方式处理错误。

如何捕获错误编号 50001?请注意,我正在使用 Dapper 来执行所有存储过程。

SQL

THROW 50001, 'Client already has an Active Visit! THIS IS DEV!!!!',1;

Msg 50001, Level 16, State 1, Line 1
Client already has an Active Visit! THIS IS DEV!!!!

C#

catch (SqlException ex)
{
var errorHandler = new ErrorHandler();
var msg = errorHandler.ErrorMessage(ex);
if (ex.Number == 50001)
{
return BadRequest(msg);
}
else
{
return StatusCode(500, msg);
}
}
catch (Exception ex)
{
var errorHandler = new ErrorHandler();
return StatusCode(500, errorHandler.ErrorMessage(ex));
}

示例 example

最佳答案

SQL 服务器错误 50000 是为一般用户定义的消息保留的,因此听起来它没有在 sys.messages 中找到错误 50001。您可以尝试使用存储过程 sp_addmessage 添加错误。

完成后,您可以这样调用它:

RAISERROR(50001, 1, 1)

它可能是错误 50000 的另一个原因是,如果您在 SQL TRY/CATCH 中引发 SQL 错误,因为它总是会返回 50000 错误代码。


我自己试过这段代码:

using (var cmd = new SqlCommand("THROW 50001,'error',1;", conn))
{
cmd.ExecuteNonQuery();
}

这确实返回了 ex.Number 50001,因此它一定是您的 SQL 中的问题。正如我上面所说,这可能是由 TRY/CATCH 引起的,因为这不会保存原始错误代码编号。

关于c# - 如何使用 Dapper 获取用户定义的 SQLException 编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51519587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com