How Can I check if a dotnet transaction is closed or not ?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)){
try{
//Do something;
scope.Complete(); //denotes the transaction completed successful.
}
catch(TransactionAbortedException ex)
{
//scope.Complete(); is never called, the transaction rolls back automatically.
}
catch(ApplicationException ex)
{
}
}
回答2:
Your title asks one thing and your question asks another. so, I am going with your title.
If you want to know if the transaction is rolled back or set to rollback only, you can check
transaction.WasRolledBack // true if transaction is rolled back
Here, transaction
is an instance of ITransaction
Edit (based on your comment):
var isRolledBack = false;
using (var connection = new SqlConnection())
{
using (var transaction = connection.BeginTransaction())
{
try
{
// do your stuff here with transaction
}
catch (Exception ex)
{
transaction.Rollback();
isRolledBack = true;
throw;
}
}
}
Now, you can check the isRolledBack
flag to see if the transaction is rolled back
回答3:
If you are on SQL server, you can use DBCC OPENTRAN
http://msdn.microsoft.com/en-us/library/ms182792.aspx