事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:
方法1:直接写入到sql 中
在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现

 

 


begin trans
declare @orderDetailsError int,@procuntError int

delete from [order details] where productid=42
select @orderDetailsError =@@error
delete from products where productid=42
select @procuntError=@@error
if(@orderDetailsError =0 and @procuntError=0)
COMMIT
 TRANS
else

ROLLBACK TRANS

 

优点:
  所有事务逻辑包含在一个单独的调用中
  拥有运行一个事务的最佳性能
  独立于应用程序
限制:
  事务上下文仅存在于数据库调用中
  数据库代码与数据库系统有关
方法2 :使用ADO.NET 实现
使用ADO.NET 实现,使用这种方式的优点是可以在中间层来管理事务,当然你也可以选择在数据层来实现。
SqlConnection 和OleDbConnection  对象有一个 BeginTransaction 方法,它可以返回 SqlTransaction
或者OleDbTransaction 对象。而且这个对象有 Commit 和 Rollback 方法来管理事务

 

 


SqlConnection sqlConnection = new SqlConnection("workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False");
   sqlConnection.Open();
   SqlTransaction  myTrans 
=
 sqlConnection.BeginTransaction();
   SqlCommand sqlInsertCommand 
= new
 SqlCommand();
   sqlInsertCommand.Connection 
=
 sqlConnection
   sqlInsertCommand.Transaction
=
myTrans;
   
try
{
       sqlInsertCommand.CommandText
="insert into tbTree(Context,ParentID) values('北京',1)"
;
       sqlInsertCommand.ExecuteNonQuery();
       sqlInsertCommand.CommandText
="insert into tbTree(Context,ParentID) values('上海',1)"
;
       sqlInsertCommand.ExecuteNonQuery();
       myTrans.Commit();
     }
catch
(Exception ex)
     {
      myTrans.Rollback();
     }
    
finally

    {
     sqlConnection.Close();
    }

优点:
     简单性
     和数据据事务差不多的快
     独立于数据库,不同数据库的专有代码被隐藏了
缺点:
     事务不能跨越多个数据库连接
     事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接
     ADO.NET分布事务也可以跨越多个数据库,但是其中一个SQL SERVER 数据库的话,通过用SQL SERVER连接服务器连接到别的数据库,但是如果是在DB2和Orcal之间就不可以。
以上两种事务是经常用到的事务处理方法。

posted on 2009-05-30 18:11  钱途无梁  阅读(202)  评论(0编辑  收藏  举报