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

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

 1 public  void Insert( string UserName,ArrayList alRoles)
 2 {
 3using (TransactionScope _ts = new TransactionScope())
 4{
 5     //插入用户
 6      new user().Insert(UserName);
 7
 8     //  插入角色
 9       new Role().Insert(UserName,alRoles);
10
11      _ts.Complete();
12}

13}

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

 1          public  void Work()
 2          {
 3            Transaction _old = Transaction.Current;
 4            CommittableTransaction _newCommit = new CommittableTransaction();
 5            Transaction.Current = _newCommit;
 6
 7            try
 8            {
 9                _newCommit.BeginCommit(OnCommit, null);
10            }

11            finally
12            {
13                Transaction.Current = _old;
14            }

15        }

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

45            }

46            catch (Exception e)
47            {
48
49            }

50        }

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

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








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



相关文章
|
前端开发 C# 数据库
.NET中使用BootstrapBlazor组件库Table实操篇
.NET中使用BootstrapBlazor组件库Table实操篇
568 0
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
475 0
|
移动开发 网络协议 NoSQL
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
1237 0
|
API
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html
1468 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
419 0
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
329 0
|
存储 开发框架 前端开发
基于Lumisoft.NET组件,使用IMAP协议收取邮件
基于Lumisoft.NET组件,使用IMAP协议收取邮件
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
459 1
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
447 0