【发布时间】:2018-01-07 02:14:36
【问题描述】:
我尝试使用 ADO.NET 和事务实现简单的重试逻辑。 代码示例:
using(SqlConnection conn = new SqlConnection(m_connection))
{
conn.Open();
bool committed = false;
Exception exception = null;
for (int i = 0; i < s_attempts; i++)
{
SqlTransaction tran = conn.BeginTransaction();
try
{
// different commands here..
tran.Commit();
committed = true;
break;
}
catch (Exception ex)
{
exception = ex;
tran.Rollback();
}
}
if (!committed && exception != null)
{
throw exception;
}
}
在前一个连接回滚后,是否可以在一个连接中创建另一个事务?
提前谢谢你!
【问题讨论】:
-
@Anderi ,这取决于目的,如果一个事务依赖于另一个事务,那么这两个事务必须在单个提交中,否则最好松散耦合它们。
-
@HameedSyed,在尝试部分我想每次都调用相同的逻辑。有时它会崩溃(例如死锁),我想回滚已经完成的操作并在新事务中再次重试相同的命令。从您的回答中我了解到,我可以做到。谢谢!
标签: c# tsql transactions ado.net