2017-03-28 51 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