成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

挖掘使用ADO.NET分布式事務登記

開發 后端 分布式
這里就使用 System.Transactions、自動在ADO.NET分布式事務中登記、手動在ADO.NET分布式事務中登記三方面做出了詳細的介紹,希望對大家有幫助。

ADO.NET經過長時間的發展,很多用戶都很了解ADO.NET分布式事務了,這里我發表一下個人理解,和大家討論討論。事務是一組相關的任務,作為獨立于其他任務的獨立單元成功(提交)或失敗(中止)。分布式事務是影響多個資源的事務。要提交分布式事務,所有參與者都必須保證對數據的任何更改是永久的。不論系統崩潰或是發生其他無法預料的事件,更改都必須是持久的。即使只有一個參與者無法保證這一點,整個事務也將失敗,在事務范圍內對數據的任何更改均將回滾。如果 DataReader 在事務處于活動狀態時啟動,此時若嘗試提交或回滾事務,將會引發異常。

使用 System.Transactions

在 .NET Framework 中,分布式事務通過 System.Transactions 命名空間中的 API 進行管理。如果涉及多個永久資源管理器,System.Transactions API 會將分布式事務處理委托給事務監視器,例如 Microsoft 分布式事務協調程序 (MS DTC)。有關更多信息,請參見事務基礎知識。

ADO.NET 2.0 引入了對使用 EnlistTransaction 方法在分布式事務中進行登記的支持,該方法會登記 Transaction 實例中的連接。在以前版本的 ADO.NET 中,分布式事務中的顯式登記使用連接的 EnlistDistributedTransaction 方法執行,以登記 ITransaction 實例中的連接,為了向后兼容,也支持該方法。有關企業服務事務的更多信息,請參見 與企業服務和 COM+ 事務的互操作性。

在對 SQL Server 2005 數據庫使用 SQL Server .NET Framework 提供程序提供的 System.Transactions 事務時,將自動使用輕型 Transaction。該事務可以根據需要提升為完全分布式事務。有關更多信息,請參見SQL Server 的 System.Transactions 集成 (ADO.NET)。默認情況下,Oracle 數據庫可以同時參與的分布式事務的最大數目設置為 10。第 10 個事務之后,連接到 Oracle 數據庫時將會引發異常。Oracle 不支持分布式事務內的 DDL。

自動在ADO.NET分布式事務中登記

自動登記是將 ADO.NET 連接與 System.Transactions 集成的默認(和首選)方法。如果連接對象確定事務處于活動狀態,用 System.Transaction 術語來說是指 Transaction.Current 不為 Null,則連接對象會自動在現有分布式事務中登記。自動事務登記在連接打開時進行。之后,即使在事務范圍內執行命令,也不會進行自動事務登記??梢栽诂F有事務中禁用自動登記,方法是將 Enlist=false 指定為 ConnectionString 的連接字符串參數,或將 OLE DB Services=-7 指定為 ConnectionString 的連接字符串參數。有關 Oracle 和 ODBC 連接字符串參數的更多信息,請參見 ConnectionString 和 ConnectionString。

手動在ADO.NET分布式事務中登記

如果禁用了自動登記或者您需要登記在連接打開后啟動的事務,則可以使用所用提供程序的 DbConnection 對象的 EnlistTransaction 方法,在現有分布式事務中登記。在現有分布式事務中登記可以確保當提交或回滾了事務時,也提交或回滾對數據源所做作的代碼修改。

在分布式事務中登記尤其適用于為業務對象建立池連接。如果業務對象使用打開的連接建立池連接,自動事務登記只有在該連接打開時才會進行。如果使用池中的業務對象執行多個事務,則該對象的打開連接不自動登記在新啟動的事務中。在這種情況下,可以對該連接禁用自動事務登記,并使用 EnlistTransaction 在事務中登記連接。

EnlistTransaction 使用單個 Transaction 類型的參數,該參數引用現有的事務。在調用連接的 EnlistTransaction 方法之后,所有使用該連接在數據源上進行的修改均將加入事務中。傳遞空值將取消該連接在當前分布式事務登記中的登記。注意,在調用 EnlistTransaction 之前連接必須打開。在某個事務中顯式登記了連接之后,在該事務完成之前,連接將無法取消登記或在另一個事務中登記。

#T#如果連接已使用連接的 BeginTransaction 方法開始了某個事務,EnlistTransaction 將引發異常。但是,如果事務是在數據源上開始的本地事務(例如使用 SqlCommand 顯式執行 BEGIN TRANSACTION 語句),EnlistTransaction 將回滾該本地事務并根據請求在現有分布式事務中登記。您不會接收本地事務已回滾的通知,必須管理任何未使用 BeginTransaction 開始的本地事務。如果您在 SQL Server 2005 中使用用于 SQL Server 的 .NET Framework 數據提供程序 (SqlClient),那么在嘗試登記時將會引發異常。所有其他情況將無法發現。

責任編輯:田樹 來源: 博客
相關推薦

2009-11-12 12:39:16

ADO.NET Sta

2009-11-13 14:19:06

ADO.NET事務

2009-12-28 15:11:36

ADO.NET專家

2009-11-12 13:26:56

使用ADO.NET參數

2009-11-12 14:26:34

ADO.NET執行事務

2009-11-13 17:01:07

ADO.NET事務處理

2009-11-12 10:06:01

ADO.NET讀取數據

2009-11-13 10:10:07

2009-11-13 14:22:11

ADO.NET Dat

2009-12-25 10:25:59

2009-11-13 14:38:45

ADO.NET Dat

2009-12-30 16:50:26

ADO.NET事務

2010-01-04 13:06:50

ADO.NET事務

2009-12-21 14:50:47

ADO.NET優化

2009-12-21 16:53:06

ADO.NET使用說明

2009-12-31 13:50:46

ADO.NET模型

2009-08-21 16:35:08

使用C#結合ADO.N

2009-10-29 10:34:31

ADO.NET使用技巧

2009-11-12 10:15:37

ADO.NET使用

2009-12-22 16:35:11

ADO.NET控件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美精品在线播放 | 日韩精品一区二区三区中文在线 | 日韩欧美中文 | 四季久久免费一区二区三区四区 | 九九热精品视频 | 成人av一区 | 国精产品一区一区三区免费完 | 91精品国产91| av在线免费观看不卡 | 免费成人在线网 | 成人精品一区二区三区四区 | 午夜视频免费在线 | 狠狠干天天干 | 成年人在线观看视频 | 在线播放国产一区二区三区 | 午夜影院在线免费观看视频 | 91国内精精品久久久久久婷婷 | 国产一区亚洲 | 久久国产精品-国产精品 | 99久久婷婷国产综合精品电影 | 超碰97干| 亚洲国产精品一区二区第一页 | 在线精品亚洲欧美日韩国产 | 久草青青草 | 91视频网| 欧美激情va永久在线播放 | 91精品导航 | 亚洲手机视频在线 | av在线一区二区三区 | 久久久激情| 国产精华一区 | 日韩一区二区视频 | 久久午夜电影 | 国产乱性 | 超碰在线人人干 | 特黄av| 91亚洲国产成人久久精品网站 | 国产精品高清在线 | 黄色网页在线 | 久久久国产精品入口麻豆 | 蜜桃视频麻豆 |