ITPub博客

首页 > Linux操作系统 > Linux操作系统 > .NET中事务操作小结(1)

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

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-03-11 17:15:05 0 删除 编辑

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

基本的事务必须从属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实现,这种方式最为简单

--在SQL中使用事务
begin Trans
declare @orderError int,@productError int
delete from OrderList where id=45
select @orderError=@@Error

delete from ProductList where id=44
select @productError=@@Error

if(@orderError==0 and @productError==0)
commit Trans
else
RollBack Trans
//在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之间就不行。如下实例代码:

--在ADO.net中添加事务
--连接字符串已知conStr

using(SqlConnenction getCon=new SqlConnection(conStr))
{
   //open Connection
   getCon.open();
   //声明一个SqlTransaction
   SqlTransaction getTran=getCon.BeginTransaction();
   SqlCommand getCmd=new SqlCommand();
   getCmd.Connection=getCon;
   //定义命令操作事务
   getCmd.Transaction=getTran;
  
   //通过一个Try-Catch
   try
   {
     //执行第一条SQL语句
     getCmd.CommandText="insert into OrderList('德国柏林')";
     getCmd.ExecuteNonQuery();
     //执行第二条SQL语句
      getCmd.CommandText="delete from OrderList where id=1425";
     getCmd.ExecuteNonQuery();
     //若没有异常提交事务
      getTran.Commit();
   }catch(Exception ce)
   {
    //出现异常 事务回滚
     getTran.RollBack();
   }finally
   {
    //关闭数据库连接 使用了Using快就不需要了
    // getCom.close();
   }
   
  
}
 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-566855/,如需转载,请注明出处,否则将追究法律责任。

上一篇: c#排序算法
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5314882