C# 预执行 事务回滚

在业务应用中我们会遇到这样的问题

引用了一个DLL  在这个DLL中有一个方法,我们需要调用并执行,然而这个DLL并非独立执行的,要和本系统一起执行,要达到的效果一荣俱荣,一损俱损。

当然这里不仅仅局限于DLL  也可能是本系统内部的功能模块。

举例: A 是一个独立的应用模块  B 是一个独立的应用模块   但是A和B要一起执行  购物的时候 扣款了但是没有购买记录是不是很不爽啊。

那么这个情况就是 A 先预执行  预执行成功 执行B B如果执行成功 则A 执行 PreDoCommitTrans()

如果B 执行失败 则A 执行PreDoRollBack() 即可。(如果有技术问题加五群:480888314)


我目前的解决办法就是预执行,先上代码:

         /// <summary>
        /// SQL 事务 预执行
        /// </summary>
        /// <param name="Oracle_str"></param>
        /// <returns></returns>
        SqlTransaction _Pretran;
        SqlConnection connTrans;
        public bool PreExecuteTrans(List<string> Oracle_str)
        {
            connTrans = new SqlConnection(GetConnString());
            if (connTrans.State != ConnectionState.Open)
            {
                connTrans.Open();
            }
            SqlCommand _OracleCommand = new SqlCommand();
            _Pretran = connTrans.BeginTransaction();
            _SqlCommand.Connection = connTrans;
            _SqlCommand.Transaction = _Pretran;
            try
            {
                for (int i = 0; i < Oracle_str.Count; i++)
                {
                    _SqlCommand.CommandText = Oracle_str[i].ToString();
                    _SqlCommand.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                ExecptionRecord.WriteExecptionToFile(ex.ToString(), _OracleCommand.CommandText);
                return false;
            }
            return true;
        }
        /// <summary>
        /// 预提交
        /// </summary>
        /// <returns></returns>
        public bool PreDoCommitTrans()
        {
            try
            {
                _Pretran.Commit();
            }
            catch (Exception ex)
            {
                ExecptionRecord.WriteExecptionToFile("事务预执行提交失败!", ex.ToString());
                connTrans.Close();
                return false;
            }
            connTrans.Close();
            return true;
        }
        /// <summary>
        /// 预回滚
        /// </summary>
        /// <returns></returns>
        public bool PreDoRollBack()
        {
            try
            {
                _Pretran.Rollback();
            }
            catch (Exception ex)
            {
                ExecptionRecord.WriteExecptionToFile("事务预执行回滚失败!", ex.ToString());
                connTrans.Close();
                return false;
            }
            connTrans.Close();
            return true;
        }

五群号:(如果有技术问题加群:480888314)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值