C# ADO.NET在一个sql连接内重试事务
我尝试使用ADO.NET和事务实现简单的重试逻辑。 代码示例:C# ADO.NET在一个sql连接内重试事务,c#,tsql,transactions,ado.net,C#,Tsql,Transactions,Ado.net,我尝试使用ADO.NET和事务实现简单的重试逻辑。 代码示例: using(SqlConnection conn = new SqlConnection(m_connection)) { conn.Open(); bool committed = false; Exception exception = null; for (int i = 0; i < s_a
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;
}
}
使用(SqlConnection conn=newsqlconnection(m_连接))
{
conn.Open();
bool-committed=false;
异常=空;
for(int i=0;i
在回滚上一个事务后,可以在一个连接中创建另一个事务吗
提前谢谢你 如果所有事务都已提交或回滚,则没有理由不能在同一连接上继续创建事务
我想问为什么第一次尝试失败,我假设在每次尝试提交事务之间都会有一些延迟(可能会增加)。@Anderi,这取决于目的,如果一个事务依赖于另一个事务,那么这两个事务必须在一次提交中,否则最好将它们松散耦合。@HameedSyed,在try部分,我希望每次调用相同的逻辑。有时它会崩溃(例如死锁),我希望回滚已经完成的操作,并在新事务中重试相同的命令。从你的回答中我知道我能做到。非常感谢。在大多数情况下,它是一种防止死锁的保护,死锁很少发生。我也这样想,但不完全确定。谢谢你的回答!