这是我的名为“uspTest”的存储过程代码
BEGIN TRY
SELECT 3 / 0;
END TRY
BEGIN CATCH
RAISERROR('D', 16, 3);
END CATCH
这是我在 Visual Studio 中的 C# 代码
public IHttpActionResult RegisterUser(RegisterModelView registerViewModel)
{
try
{
using (AusHerbEntities ctx = new AusHerbEntities())
{
ctx.uspTest();
Console.Write("i am in try block");
}
}
catch (Exception e)
{
Console.Write(e.Message);
}
return Ok();
}
当我运行这段代码时,C# 代码中的 Catch block 没有被调用,但我希望它被调用,因为存储过程会引发错误。
我怎样才能让这段代码工作?
我只想在存储过程的 catch block 中执行 RAISERROR 并在 c# 代码中捕获错误。
最佳答案
要抛出 SqlException
,存储过程必须返回并设置 @@error
。在您的例子中,END CATCH
语句清除了 @@error
。在 RAISERROR
语句之后立即插入 RETURN
语句应该会抛出 SqlException
。
BEGIN TRY
SELECT 3 / 0;
END TRY
BEGIN CATCH
RAISERROR('D', 16, 3);
RETURN;
END CATCH
关于c# - 我如何从 sql server 的 RAISERROR 捕获 C# 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623584/