繁体   English   中英

如何从SQL Server的RAISERROR中捕获C#中的错误?

[英]How can i catch error in C# from RAISERROR of 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块未被调用,但我希望它被调用,因为存储过程会引发错误。

我怎样才能使这段代码有效?

我只想在存储过程中的catch块中执行RAISERROR并捕获c#代码中的错误。

SqlException ,存储过程必须返回@@error set。 在您的情况下, END CATCH语句清除@@error RAISERROR语句之后立即插入RETURN语句应该SqlException

BEGIN TRY
SELECT 3 / 0;
END TRY

BEGIN CATCH
RAISERROR('D', 16, 3);
RETURN;
END CATCH

你需要SQL中的try-catch吗? 如果您只是用它来回滚事务,那么您只需设置XACT_ABORT并省去try-catch。 该事务将被回滚,任何错误都将传递给客户端。 这是一篇关于这个主题的好文章: https//www.simple-talk.com/sql/t-sql-programming/defensive-error-handling/

看不到你所有的c#代码而是替换; catch(异常e)with catch(SqlException e)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM