我在数据库中有几个触发器
,根据某些情况,它们可能会抛出错误并回滚事务
。
问题是,在 catch
block 中,我将收到一个 DbUpdateException
,它不包含有关错误原因的任何信息,并且内部异常不会也没有任何有意义的错误消息。
当我使用 Entity Framework
时,如何获取错误消息或触发器名称?我需要这样做才能向用户显示友好的消息。
第二个内部异常是 SqlException
,但将其转换为 SqlException
无济于事,因为 Procedure
是一个空字符串。
(e?.InnerException?.InnerException as System.Data.SqlClient.SqlException).Procedure
最佳答案
要获取触发器名称,您需要将其包含在错误消息中。下面是样板代码示例。
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
关于c# - 在 DbUpdateException 中获取触发器的名称或错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39136645/