2016-08-25 143 views
2

我在數據庫中有幾個triggers,並且根據某些條件,它們可能會引發錯誤並且rollback transaction在DbUpdateException中獲取觸發器的名稱或錯誤消息

問題是,在catch塊中,我將收到一個DbUpdateException,其中不包含有關錯誤原因的任何信息,並且內部異常也沒有任何有意義的錯誤消息。

當我使用Entity Framework時,如何獲得錯誤消息或觸發器的名稱?我需要這樣做才能夠向用戶顯示友好的信息。

第二個內部異常是SqlException,但由於Procedure是空字符串,所以將其轉換爲SqlException並不能解決問題。

(e?.InnerException?.InnerException as System.Data.SqlClient.SqlException).Procedure 

回答

0

要獲得觸發器名稱,您需要將其包含在錯誤消息中。以下是一個樣板代碼示例。

CREATE TRIGGER TR_YourTable ON dbo.YourTable 
FOR INSERT, UPDATE, DELETE AS 
BEGIN TRY 
    --do something; 
END TRY 
BEGIN CATCH 
    DECLARE @ErrorMessage nvarchar(2000) = 
     'Error occurred in trigger ' + OBJECT_NAME(@@PROCID) + ':' + ERROR_MESSAGE(); 
    RAISERROR(@ErrorMessage,16,1); 
END CATCH; 
GO 
+0

感謝您的回放,但我甚至無法收到錯誤消息。要麼會做,我只想知道發生了什麼。 – Akbari

相關問題