在组件之间实现事务和异步提交事务(NET2.0)

假设要Insert1个用户和该用户对应角色,而这2个Insert方法已经封装到2个dll中了,现在要在这个2个方法中实现事务,代码很简单,如下(需先添加对System.Transactions程序集的引用)

 1在组件之间实现事务和异步提交事务(NET2.0)public void Insert(string UserName,ArrayList alRoles)
 2在组件之间实现事务和异步提交事务(NET2.0){
 3在组件之间实现事务和异步提交事务(NET2.0)using (TransactionScope _ts = new TransactionScope())
 4在组件之间实现事务和异步提交事务(NET2.0){
 5在组件之间实现事务和异步提交事务(NET2.0)     //插入用户
 6在组件之间实现事务和异步提交事务(NET2.0)      new user().Insert(UserName);
 7在组件之间实现事务和异步提交事务(NET2.0)
 8在组件之间实现事务和异步提交事务(NET2.0)     //  插入角色
 9在组件之间实现事务和异步提交事务(NET2.0)       new Role().Insert(UserName,alRoles);
10在组件之间实现事务和异步提交事务(NET2.0)
11在组件之间实现事务和异步提交事务(NET2.0)      _ts.Complete();
12在组件之间实现事务和异步提交事务(NET2.0)}

13在组件之间实现事务和异步提交事务(NET2.0)}

异步提交事务的代码也很简单:

 1在组件之间实现事务和异步提交事务(NET2.0)        public void Work()
 2在组件之间实现事务和异步提交事务(NET2.0)        {
 3在组件之间实现事务和异步提交事务(NET2.0)            Transaction _old = Transaction.Current;
 4在组件之间实现事务和异步提交事务(NET2.0)            CommittableTransaction _newCommit = new CommittableTransaction();
 5在组件之间实现事务和异步提交事务(NET2.0)            Transaction.Current = _newCommit;
 6在组件之间实现事务和异步提交事务(NET2.0)
 7在组件之间实现事务和异步提交事务(NET2.0)            try
 8在组件之间实现事务和异步提交事务(NET2.0)            {
 9在组件之间实现事务和异步提交事务(NET2.0)                _newCommit.BeginCommit(OnCommit, null);
10在组件之间实现事务和异步提交事务(NET2.0)            }

11在组件之间实现事务和异步提交事务(NET2.0)            finally
12在组件之间实现事务和异步提交事务(NET2.0)            {
13在组件之间实现事务和异步提交事务(NET2.0)                Transaction.Current = _old;
14在组件之间实现事务和异步提交事务(NET2.0)            }

15在组件之间实现事务和异步提交事务(NET2.0)        }

16在组件之间实现事务和异步提交事务(NET2.0)        void OnCommit(IAsyncResult asy)
17在组件之间实现事务和异步提交事务(NET2.0)        {
18在组件之间实现事务和异步提交事务(NET2.0)            CommittableTransaction _commit;
19在组件之间实现事务和异步提交事务(NET2.0)            _commit = asy as CommittableTransaction;
20在组件之间实现事务和异步提交事务(NET2.0)
21在组件之间实现事务和异步提交事务(NET2.0)            try
22在组件之间实现事务和异步提交事务(NET2.0)            {
23在组件之间实现事务和异步提交事务(NET2.0)                using (_commit)
24在组件之间实现事务和异步提交事务(NET2.0)                {
25在组件之间实现事务和异步提交事务(NET2.0)                    SqlConnection _cnn = new SqlConnection("在组件之间实现事务和异步提交事务(NET2.0)");
26在组件之间实现事务和异步提交事务(NET2.0)                    SqlCommand _cmd = new SqlCommand();
27在组件之间实现事务和异步提交事务(NET2.0)
28在组件之间实现事务和异步提交事务(NET2.0)
29在组件之间实现事务和异步提交事务(NET2.0)                    _cnn.Open();
30在组件之间实现事务和异步提交事务(NET2.0)
31在组件之间实现事务和异步提交事务(NET2.0)                    _cnn.EnlistTransaction(_commit);    //  利用事务
32在组件之间实现事务和异步提交事务(NET2.0)
33在组件之间实现事务和异步提交事务(NET2.0)                    _cmd.Connection = _cnn;
34在组件之间实现事务和异步提交事务(NET2.0)
35在组件之间实现事务和异步提交事务(NET2.0)                    _cmd.CommandText = "在组件之间实现事务和异步提交事务(NET2.0).";
36在组件之间实现事务和异步提交事务(NET2.0)                    _cmd.ExecuteNonQuery();
37在组件之间实现事务和异步提交事务(NET2.0)
38在组件之间实现事务和异步提交事务(NET2.0)                    _cmd.CommandText = "在组件之间实现事务和异步提交事务(NET2.0)";
39在组件之间实现事务和异步提交事务(NET2.0)                    _cmd.ExecuteNonQuery();
40在组件之间实现事务和异步提交事务(NET2.0)
41在组件之间实现事务和异步提交事务(NET2.0)                    _commit.EndCommit(asy);
42在组件之间实现事务和异步提交事务(NET2.0)
43在组件之间实现事务和异步提交事务(NET2.0)                    _cnn.Close();
44在组件之间实现事务和异步提交事务(NET2.0)                }

45在组件之间实现事务和异步提交事务(NET2.0)            }

46在组件之间实现事务和异步提交事务(NET2.0)            catch (Exception e)
47在组件之间实现事务和异步提交事务(NET2.0)            {
48在组件之间实现事务和异步提交事务(NET2.0)
49在组件之间实现事务和异步提交事务(NET2.0)            }

50在组件之间实现事务和异步提交事务(NET2.0)        }

上面我们用TransactionScope和CommittableTransaction。
TransactionScope是隐示的,是由系统自动管理的,所以它没有什么RollBack方法。
CommittableTransaction是显示的,它有commit和RollBack方法。
------------------------------------------

以上都是个人的看法和体会,如有不妥处,还请大家多多指点,谢谢!








本文转自BearRui(AK-47)博客园博客,原文链接:http://www.cnblogs.com/BearsTaR/archive/2006/04/17/Transactions.html    ,如需转载请自行联系原作者



上一篇:Spring使用内存数据库


下一篇:开发eclipse插件遇到的问题