2017-03-28 44 views
0

我正在为我的程序设计一个日志系统,并且我需要知道系统中的任何事务何时提交或回滚。既然我从一个地方打开我的连接,并且从一个地方开始交易,我已经'BEGIN TRANSACTION'覆盖但是回滚我无法获得。在.NET中事务提交或回滚时获取信息。任何交易

请注意,我完全控制了开放和粉碎事务,我可以很容易地在那里记录它,但我不认为这是好的设计,因为从那之后程序员将不得不担心记录每个提交或回滚!

除了实现我自己的IConnection和IDbTransaction什么是最好的解决方案?

回答

0

使用扩展事件记录所有内容。下面的脚本日志回滚,但你可以添加BEGIN TRANSACTION事件或其他任何东西:

CREATE EVENT SESSION [rollback] ON SERVER 
ADD EVENT sqlserver.rollback_tran_completed, 
ADD EVENT sqlserver.rollback_tran_starting 
ADD TARGET package0.event_file(SET filename=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel') 
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON) 

然后你就可以用查询的结果:

SELECT * FROM sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel', null, null, null) 
+0

我会更新我的答案。我正在寻找C#解决方案。我不希望将其记录在数据库上。 – Rob