ADO.NET在一个sql连接中重试事务

时间:2017-07-31 13:16:47

标签: 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_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;
            }
        }

在前一个连接被回滚后,是否可以在一个连接中创建另一个事务?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

我会问为什么第一次尝试失败了,我假设你会在每次提交交易的尝试之间放一些延迟(可能会增加)。