日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在组件之间实现事务和异步提交事务(NET2.0) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
假設要Insert1個用戶和該用戶對應角色,而這2個Insert方法已經封裝到2個dll中了,現在要在這個2個方法中實現事務,代碼很簡單,如下(需先添加對System.Transactions程序集的引用)

?1public?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方法。
------------------------------------------
以上都是個人的看法和體會,如有不妥處,還請大家多多指點,謝謝!

轉載于:https://www.cnblogs.com/BearsTaR/archive/2006/04/17/Transactions.html

總結

以上是生活随笔為你收集整理的在组件之间实现事务和异步提交事务(NET2.0)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。