簡體   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