c# - 我如何从 sql server 的 RAISERROR 捕获 C# 中的错误?

标签 c# sql-server

这是我的名为“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/

相关文章:

sql-server - SQL Server "AFTER INSERT"触发器看不到刚刚插入的行

sql-server - 在 SSMS 中添加缺失索引的建议有多好?

java - 将时间/日期时间与时区信息完整提取到 Java8 OffsetTime/OffsetDateTime 中

c# - WP8 后台代理 - 代码在代理外部执行良好,但在代理内部失败?

c# - 将原始树合并到结果树的步骤

c# - 在 C# 中使用静态函数和变量的困难

sql-server - LINQ To SQL 表示读取器关闭时调用 Read 的尝试无效

javascript - 使用 javascript 调用元素内的部分 View

c# - SOAP 到 REST 的转换

sql-server - 如何更改 SQL Server 2005 中的默认事务隔离级别?