2016-08-25 140 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

相关问题