C# 预执行 事务回滚

原创 2015年11月18日 14:52:00

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

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

C#回滚事务

string  str="server=.;initial catalog=mytest;integrated security=true;"  using( SqlConnection conn ...

C#中回滚TransactionScope的使用方法和原理

TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成 实事上,一个错误的理解就是Complete()方法是提交事务的,这是错误的,事实上,它的作用的表...

C#数据库编程---事务回滚

事务的四个特性之一是原子性,其含义是指对于特定操作序列组成的事务,要么全部完成,要么就一件也不做。如果在事务处理的过程中,发生未知的不可预料的错误,如何保证事务的原子性呢?当事务中止时,必须执行回滚操...
  • lhxs
  • lhxs
  • 2015年11月18日 14:16
  • 1398

C#数据库编程---事务回滚

事务的四个特性之一是原子性,其含义是指对于特定操作序列组成的事务,要么全部完成,要么就一件也不做。如果在事务处理的过程中,发生未知的不可预料的错误,如何保证事务的原子性呢?当事务中止时,必须执行回滚操...

C# 事务的调用和回滚

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...

NET 2.0中的事务处理、回滚处理

  • 2010年10月09日 15:43
  • 96KB
  • 下载

Spring/SpringMVC/MyBatis整合+事务回滚

  • 2016年02月24日 11:33
  • 25.61MB
  • 下载

SQL Server 事务执行一半出错是否自动回滚整个事务

大家都知道SQL Server事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 预执行 事务回滚
举报原因:
原因补充:

(最多只允许输入30个字)