2016-08-23 66 views
-1

我已经创建了存储过程TRY CATCH。在CATCH部分,我正在执行另一个存储过程以将错误存储在表Error_Details中。COMMOLL SQL TRANSACTION IN ROLLBACK

现在在C#中,我使用DbTransaction来提交和回滚取决于错误。

问题是,回滚更改表Error_Details也回滚。

是否有任何选项应该回滚,但不是Error_Details表?

+0

我想方法应该是在C#端或在数据库端进行事务处理,而不要混淆两者。 如果您想在C#端使用DbTransaction,请从sp删除try catch,并将错误日志记录从C#端单独调用。或者,也可以在SP内完成整个事务处理,并从C#端取消DbTransaction。 – ArunGeorge

回答

0

使用存储过程本身内的事务。 请参阅下面的一个示例。

BEGIN TRY 

    BEGIN TRANSACTION MyActivity 

    -- Your SQL COMMANDS 

COMMIT TRANSACTION MyActivity 
END TRY 

BEGIN CATCH 
    IF (@@TRANCOUNT > 0) 
    BEGIN 
     ROLLBACK TRANSACTION MyActivity  
    END 
    INSERT INTO ERROR_DETAILS --INSERTING ErrorInfo INTO LOG TABLE 
    SELECT 
     ERROR_NUMBER() AS ErrorNumber, 
     ERROR_SEVERITY() AS ErrorSeverity, 
     ERROR_STATE() AS ErrorState, 
     ERROR_PROCEDURE() AS ErrorProcedure, 
     ERROR_LINE() AS ErrorLine, 
     ERROR_MESSAGE() AS ErrorMessage 
END CATCH 
相关问题