C# ADO.NET在一个sql连接内重试事务

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

我尝试使用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;
            }
        }
使用(SqlConnection conn=newsqlconnection(m_连接))
{
conn.Open();
bool-committed=false;
异常=空;
for(int i=0;i
在回滚上一个事务后,可以在一个连接中创建另一个事务吗


提前谢谢你

如果所有事务都已提交或回滚,则没有理由不能在同一连接上继续创建事务


我想问为什么第一次尝试失败,我假设在每次尝试提交事务之间都会有一些延迟(可能会增加)。

@Anderi,这取决于目的,如果一个事务依赖于另一个事务,那么这两个事务必须在一次提交中,否则最好将它们松散耦合。@HameedSyed,在try部分,我希望每次调用相同的逻辑。有时它会崩溃(例如死锁),我希望回滚已经完成的操作,并在新事务中重试相同的命令。从你的回答中我知道我能做到。非常感谢。在大多数情况下,它是一种防止死锁的保护,死锁很少发生。我也这样想,但不完全确定。谢谢你的回答!