.NET中事务操作小结(1)

事务处理机制详解
本文深入介绍了事务处理机制的ACID特性,并对比了SQL事务、ADO.NET事务及分布式事务的特点及应用场景,提供了具体代码示例。

在进行数据库操作的过程中,需要通过一种机制来保证数据的完整性,即称为事务

基本的事务必须从属4个特点ACID(Atomicity,Consistency,Isolation and Duiability),即原子性,一致性,独立性,持久性,总体特点说明如下:

Atomicity(原子性):在一个操作中涉及两个或两个以上独立的信息,这些信息要么全部提交,要么都不提交

Consistency(一致性):操作要么创建新的有效的数据状态,要么(如果发生错误下)将所又的数据返回到初始状态

Isolation(独立性):操作在没有提交并不与其他操作发生任何关系

Duiability(持久性):即使操作过程中发生了错误需要重新启动,保存的已经提交的数据在正确的状态下任然有效

。NET事务主体主要分成两种情况:手动事务和自动事务

。NET目前提供了三种事务机制:

(1)在SQL中使用事务

(2)在ADO.NET中使用事务

(3)分布式事务(Com+事务)—主要用于自动事务控制

A:在SQL中使用事务

关键字:Begin Trans,Commit Trans,RollBack Trans实现,这种方式最为简单


  1. --在SQL中使用事务  
  2. begin Trans  
  3. declare @orderError int,@productError int 
  4. delete from OrderList where id=45  
  5. select @orderError=@@Error  
  6.  
  7. delete from ProductList where id=44  
  8. select @productError=@@Error  
  9.  
  10. if(@orderError==0 and @productError==0)  
  11. commit Trans  
  12. else 
  13. RollBack Trans  
  14. //在SQL使用最为简单 不做过多介绍 

B:在ADO.NET中使用事务:

在ADO.net中主要通过Transaction对象来实现事务的基本处理。

SqlConnection和OledbConnection对象有一个BeginTransaction方法,该方法返回一个SqlTransaction或者OleDBTransaction对象,而这两个对象中Commit和RollBack方法来管理事务处理。很简便明了

其中在ADO.net主要特点是:

优点是: 

(A)操作简单(主要是对象几个方法)和数据库事务差不多

(B)独立于数据库 不同数据库专有代码被隐藏了

缺点是:

(A)事务不能跨多个数据库连接(分布式事务可以跨多个数据库)

(B)事务执行必须依靠一个存在的数据库连接,从Transaction对象生成就可以看出通过SqlConnection或OleDBConnection对象获得。

(C)ADO.net中分布式事务可以跨多个数据库,如果其中一个是SQLServer数据库的话,通过SQLserver连接服务器连接别的数据库,但如果是DB2和Oracle之间就不行。如下实例代码:


  1. --在ADO.net中添加事务  
  2. --连接字符串已知conStr  
  3.  
  4. using(SqlConnenction getCon=new SqlConnection(conStr))  
  5. {  
  6.    //open Connection 
  7.    getCon.open();  
  8.    //声明一个SqlTransaction  
  9.    SqlTransaction getTran=getCon.BeginTransaction();  
  10.    SqlCommand getCmd=new SqlCommand();  
  11.    getCmd.Connection=getCon;  
  12.    //定义命令操作事务  
  13.    getCmd.Transaction=getTran;  
  14.      
  15.    //通过一个Try-Catch  
  16.    try  
  17.    {  
  18.      //执行第一条SQL语句  
  19.      getCmd.CommandText="insert into OrderList('德国柏林')";  
  20.      getCmd.ExecuteNonQuery();  
  21.      //执行第二条SQL语句  
  22.       getCmd.CommandText="delete from OrderList where id=1425";  
  23.      getCmd.ExecuteNonQuery();   
  24.      //若没有异常提交事务  
  25.       getTran.Commit();  
  26.    }catch(Exception ce)  
  27.    {  
  28.     //出现异常 事务回滚  
  29.      getTran.RollBack();  
  30.    }finally  
  31.    {  
  32.     //关闭数据库连接 使用了Using快就不需要了  
  33.     // getCom.close();  
  34.    }  
  35.       
  36.      

分布式事务 在小结(2)重点讲详细讲解



本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765466

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值