TransactionScope error in ambient transaction does not rollback the transaction

前端 未结 3 466
臣服心动
臣服心动 2021-01-25 02:35

I use an ambient transaction like this :


using(TransactionScope tran = new TransactionScope()) {
    CallAMethod1();//INSERT
    CallAMethod2();//INSERT
           


        
3条回答
  •  既然无缘
    2021-01-25 03:21

    You can use scope inner and outer for transaction:

    string connectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
    var option = new TransactionOptions
    {
         IsolationLevel = IsolationLevel.ReadCommitted,
         Timeout = TimeSpan.FromSeconds(60)
    };
    using (var scopeOuter = new TransactionScope(TransactionScopeOption.Required, option))
    {
        using (var conn = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText="INSERT INTO Data(Code, FirstName)VALUES('A-100','Mr.A')";
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
            }
        }
        using (var scopeInner = new TransactionScope(TransactionScopeOption.Required, option))
        {
            using (var conn = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText="INSERT INTO Data(Code, FirstName) VALUES('B-100','Mr.B')";
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            scopeInner.Complete();
        }
        scopeOuter.Complete();
    }
    

提交回复
热议问题