关闭

C# 预执行 事务回滚

标签: C# 预执行 事务回滚
149人阅读 评论(0) 收藏 举报

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

引用了一个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)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:829次
    • 积分:65
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档