交易范围和多个地区

本文关键字:地区 范围 交易 | 更新日期: 2023-09-27 18:11:05

事务范围是否跨多个区域操作?如果我有2个进程,其中一个打开连接和事务,执行插入命令,然后在事务关闭之前调用另一个进程,如果事务2失败,原始事务会考虑吗?下面是示例代码:

地区1:

public static void process1()
{
    using (SqlConnection conn = new SqlConnection(Connections.conn()))
    {
        //Open the connection
        conn.Open();
        try
        {
            //Create A new Sql transaction.
            using (var trans = new System.Transactions.TransactionScope())
            {
               using (SqlCommand insert = new SqlCommand
               {
                CommandType = CommandType.Text,
                CommandText = sql,
                Connection = conn,
                CommandTimeout = 300
                })
                {                            
                    insert.ExecuteNonQuery();
                }
            process2()
            trans.complete();
            }
         }
        catch (System.Data.SqlClient.SqlException ex)
        {
            string msg = "Insert Error:";
            msg += ex.Message;
            throw new Exception(msg);
        }
    }
}

地区2

public static void process2()
{
    using (SqlConnection conn = new SqlConnection(Connections.conn()))
    {
        //Open the connection
        conn.Open();
        try
        {
            //Create A new Sql transaction.
            using (var trans2 = new System.Transactions.TransactionScope())
            {
               using (SqlCommand insert = new SqlCommand
               {
                CommandType = CommandType.Text,
                CommandText = sql,
                Connection = conn,
                CommandTimeout = 300
                })
                {                            
                    insert.ExecuteNonQuery();
                }
            trans2.complete();
            }
         }
        catch (System.Data.SqlClient.SqlException ex)
        {
            string msg = "Insert Error:";
            msg += ex.Message;
            throw new Exception(msg);
        }
    }
}

在我的应用程序中,进程2取决于进程1的成功。如果进程1成功而进程2不成功,那么进程1的结果是无用的。

我明白,当命令在同一事务块中执行时,如果一个这样做,它们都会失败,但当我编码我的应用程序以跨不同区域执行时,我想知道是否同样适用于这种情况。我宁愿不重新编写两个不同的进程在一起。

提前感谢,

交易范围和多个地区

如果这只是一个c#文件中的两个代码块,那么为了确保两个进程都发生或都不发生,您也会希望将对这些函数的调用包装在事务作用域中。像这样:

using (var tx = new TransactionScope()) {
     process1();
     process2();
     tx.Complete();
}

这样,如果process1或process2失败,两者都将回滚。