1、事务是什么?
            事务是应用程序中一系列严密的操作,所有的操作必须全部成功完成,否则每个操作中的所有更改都会被撤销。也就是事务具有原子性,一个事务中的一系列操作要么全部成功,要么一个都不做。
 2.事务的四大特性
            数据库事务 transanction 正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。

      (1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,会被回滚(Rollback)撤销操作。
                     (2)一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
           (3)隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系          统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
           (4)持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

步入正题,我们经常遇到在对数据进行增、删、改操作的同时去操作其他数据,以插入一条数据的同时更新另一张表数据为例,
那么在ASP.NET(C#)程序当中我们怎么样来应用呢?我们来看代码:

         public bool Insert(SC_CJ_MRBBModel model)
{
//创建数据库连接对象
using (SqlConnection conn=new SqlConnection(SqlHelper.SCConnString /*数据库连接字符串*/))
{
conn.Open(); //打开连接
//开启事务:标志事务的开始
using (SqlTransaction tran=conn.BeginTransaction())
{
try
{
//Insert
string sqlStr = "insert into tableA values(@BZ,@CJRQ,FDCS)";
SqlParameter[] parm = {
new SqlParameter("@BZ",NumericParse.IsStringNull(model.BZ)),
new SqlParameter("@BZ",NumericParse.IsDateNull2(model.CJRQ)),
new SqlParameter("@BZ",NumericParse.IsStringNull(model.FDCS))
};
int count = SqlHelper.ExecuteNonQuery(tran, CommandType.Text, sqlStr.ToString(), parm); #region 不使用SqlHelper辅助类的情况下
////创建命令对象
//SqlCommand cmd = new SqlCommand(sqlStr, conn);
////通过Parameter集合的add()方法天填充参数集合
//cmd.Parameters.Add(parm);
//cmd.Transaction = tran;
//int count = cmd.ExecuteNonQuery();
#endregion //Update
string uptSqlStr = $"update tableB set A=@BZ where ID=@ID";
SqlParameter[] spr = {
new SqlParameter("@BZ",NumericParse.IsStringNull(model.BZ)),
new SqlParameter("@ID",NumericParse.IsStringNull(model.BZ))
};
SqlHelper.ExecuteNonQuery(tran, CommandType.Text, uptSqlStr.ToString(), spr); if (count > )
{
//如果Insert成功,则提交事务
tran.Commit();
return true;
}
else
{
return false; //tran.Rollback(); 这里直接Rollback也可以
}
}
catch (Exception ex)
{
//如果Insert数据出现问题,则将整个事务回滚
tran.Rollback();
LogHelper.ErrorLog(ex.Message);
return false;
throw ex;
}
finally
{
if (conn.State == ConnectionState.Open && conn != null)
{
conn.Close();
conn.Dispose(); //关闭连接,释放资源
}
}
}
}
}

 总结:一、asp.net(c#)开启事务的步骤:

          01.调用SqlConnection对象的BeginTransaction()方法,创建一个SqlTransaction对象,标志事务开始。
          02.将创建的SqlTransaction对象分配给要执行的SqlCommand的Transaction属性。
          03.调用相应的方法执行SqlCommand命令。
          04.调用SqlTransaction的Commit()方法完成事务。或调用Rollback()方法终止事务。

   二、在进行事务操作中的注意点
    01.在调用BeginTransaction()方法开始事务之前,要打开数据库连接,否则出现异常。
    02.如果在事务的Commit()方法或RollBack()方法执行前数据库连接断开或关闭,则事务将回滚。

Don't lose hope. You never know what tomorrow will bring.

ASP.NET(C#)事务的创建、提交以及回滚 (附代码)的更多相关文章

  1. J2EE分布式事务中的提交、回滚方法调用异常。

    这个是昨天上班的时候,写一个后台程序的调试程序时碰到的问题,和项目经理纠结了一天,最后搞定了.于是今天上班正好闲着,花了几乎一天的时间去网上找各种相关的资料.目前了解的内容如此: 根据使用的weblo ...

  2. CI框架的事务开启、提交和回滚

    1.运行事务 $this->db->trans_start(); // 开启事务$this->db->query('一条SQL查询...');$this->db-> ...

  3. JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】

    目录 1 Connection中的重用方法 2 JDBC事务管理经典案例 1 Connection类中常用的方法回顾 1.1 Statement createStatement() throws SQ ...

  4. 【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚

    原文地址:http://blog.csdn.net/westsource/article/details/6658109 默认情况下,批量复制操作作为独立的操作执行. 批量复制操作以非事务性方式发生, ...

  5. 如何在mysql下实现事务的提交与回滚

    最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制. 首先我们建一张tran_test表 CREATE TABLE ...

  6. RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)

    摘要: 事务消息提交或回滚的实现原理就是根据commitlogOffset找到消息,如果是提交动作,就恢复原消息的主题与队列,再次存入commitlog文件进而转到消息消费队列,供消费者消费,然后将原 ...

  7. java陷阱之spring事物未提交和回滚导致不可预知问题

    案发现场 //防止全局配置了 所以这里定义sprnig 不托管事物 @Transactional(propagation = Propagation.NOT_SUPPORTED) public boo ...

  8. 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚

    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚 如果自动提交模式被启用,在InnoDB里, 所有的用户活动发生在一个事务里, 每个SQL语句 ...

  9. BAPI总的数据库提交和回滚

    BAPI事物中的数据提交和回滚必须通过调用SAP标准业务对象BAPI SERVICE(对象类型SAP0001)的BAPI方法bapiservic.transactioncommit和bapiservi ...

随机推荐

  1. 第七章 路由 71 路由-router-link的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. kudu安装

    安装前提和准备: 硬件: 一台或者多台机器跑kudu-master.建议跑一个master(无容错机制).三个master(允许一个节点运行出错)或者五个master(允许两个节点出错). 一台或者多 ...

  3. gtid 同步1050异常处理

    gtid 同步1050异常处理 .sql CREATE TABLE `fudao_student_lable` ( `id` ) NOT NULL AUTO_INCREMENT, `uid` ) un ...

  4. 06 saltstack生产实例-需求

    https://github.com/unixhot/saltbook-code .Cobbler 1.15 统一网卡名 .Zabbix 系统已经安装好了! base .手动实现 .需要使用salt的 ...

  5. [Flask]sqlalchemy使用count()函数遇到的问题

    sqlalchemy使用count()函数遇到的问题 在使用flask-sqlalchemy对一个千万级别表进行count操作时,出现了耗时严重.内存飙升的问题. 原代码: # 统计当日登陆次数 co ...

  6. fish-redux快速创建文件夹模板 FishReduxTemplate

    推荐一款插件: 在插件plugins中搜  FishReduxTemplate

  7. Confluence 6 上传一个附加文件的新版本

    有下面 2 种方法来上传一个附加文件的新版本,你可以: 上传与已有附件具有相同文件名的版本. 使用 上传一个新版本(Upload a new version)   按钮来进行上传(这个在文件预览界面中 ...

  8. jQuery动画之自定义动画

    语法 $(selector).animate({params}, speed, callback); 参数: params: 必选,要执行动画的CSS属性. speed: 可选,执行动画时长. cal ...

  9. Python3学习笔记(十七):requests模块

    官方中文文档:http://docs.python-requests.org/zh_CN/latest/

  10. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...