2017-03-28 4 views
0

Je suis en train de créer un système de journal pour mon programme et j'ai besoin de savoir quand une transaction de mon système est validée ou annulée. Depuis que j'ouvre ma connexion d'un endroit et commence aussi des transactions d'un endroit j'ai 'BEGIN TRANSACTION' couvert mais la restauration je ne peux pas obtenir. Rappelez-vous que je suis en plein contrôle de la transaction d'ouverture et de communication et que je pourrais facilement me connecter là mais je ne pense pas que ce soit un bon design car à partir de ce moment, le programmeur devrait se soucier de consigner chaque commit ou rollback ! En plus de mettre en place mes propres IConnection et IDbTransaction, quelle serait la meilleure solution? Utilisez les événements étendus pour tous les journaux.Récupère des informations lorsque la transaction est validée ou restaurée dans .NET. Toute transaction

Répondre

0

Les journaux script suivant Rollback mais vous pouvez ajouter des événements de transaction Commencez ou toute autre chose:

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) 

Ensuite, vous pouvez interroger les résultats avec:

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

Je mettrai à jour ma réponse. Je cherche une solution C#. Je ne souhaite pas me connecter à la base de données. – Rob