-1
我已经创建了存储过程TRY CATCH
。在CATCH
部分,我正在执行另一个存储过程以将错误存储在表Error_Details
中。COMMOLL SQL TRANSACTION IN ROLLBACK
现在在C#中,我使用DbTransaction
来提交和回滚取决于错误。
问题是,回滚更改表Error_Details
也回滚。
是否有任何选项应该回滚,但不是Error_Details
表?
我已经创建了存储过程TRY CATCH
。在CATCH
部分,我正在执行另一个存储过程以将错误存储在表Error_Details
中。COMMOLL SQL TRANSACTION IN ROLLBACK
现在在C#中,我使用DbTransaction
来提交和回滚取决于错误。
问题是,回滚更改表Error_Details
也回滚。
是否有任何选项应该回滚,但不是Error_Details
表?
使用存储过程本身内的事务。 请参阅下面的一个示例。
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
我想方法应该是在C#端或在数据库端进行事务处理,而不要混淆两者。 如果您想在C#端使用DbTransaction,请从sp删除try catch,并将错误日志记录从C#端单独调用。或者,也可以在SP内完成整个事务处理,并从C#端取消DbTransaction。 – ArunGeorge