探討ADO.NET事務(wù)處理方法
ADO.NET經(jīng)過了許多的時(shí)間,相信許多許多技術(shù)人員對(duì)ADO.NET事務(wù)有所了解,在這里和大家研究一下,我們先來分析一下連接池的概念吧,然后在具體的人系事務(wù)處理的方法。
創(chuàng)建:ADO.NET事務(wù)數(shù)據(jù)提供程序使用 OLE DB 會(huì)話池來自動(dòng)管理連接池,當(dāng)連接打開時(shí),將根據(jù)一種精確的匹配算法來創(chuàng)建連接池,該算法會(huì)使連接池與連接中的字符串相關(guān)聯(lián)。每個(gè)連接池都與一個(gè)不同的連接字符串相關(guān)聯(lián)。
當(dāng)新連接打開時(shí),如果連接字符串不精確匹配現(xiàn)有池,則將創(chuàng)建一個(gè)新池。連接池是為每個(gè)唯一的連接字符串創(chuàng)建的。當(dāng)創(chuàng)建一個(gè)池后,將創(chuàng)建多個(gè)連接對(duì)象并將其添加到該池中,以滿足最小池大小的要求。連接將根據(jù)需要添加到池中,直至達(dá)到***池大小。
移除:如果連接生存期已過或者池管理程序檢測到與服務(wù)器的連接已被斷開,則對(duì)象池管理程序?qū)某刂幸瞥撨B接。請(qǐng)注意,只有在嘗試與服務(wù)器進(jìn)行通訊后,才可以檢測到這種情況。如果發(fā)現(xiàn)某連接不再連接到服務(wù)器,則會(huì)將其標(biāo)記為無效。#t#
對(duì)象池管理程序會(huì)定期掃描連接池,以查找已被釋放到池中并標(biāo)記為無效的對(duì)象。找到后,這些連接將被***移除。在編程過程中盡可能短的時(shí)間使用連接,要及時(shí)的關(guān)閉連接。關(guān)閉連接后,自動(dòng)放入連接池。PB必須手工實(shí)現(xiàn)事務(wù)處理,如回滾等。
ADO.NET事務(wù)處理方法:
1.手工ADO.NET事務(wù):用SqlConnection.BeginTransaction 方法來啟動(dòng)事務(wù),返回關(guān)聯(lián)的SqlTransaction 對(duì)象。將事務(wù)對(duì)象關(guān)聯(lián)到參與事務(wù)的命令上,用SqlTtansaction.Commit 方法提交事務(wù)SqlTransaction.Rollback 方法來回滾事務(wù)。此過程與PB相同。
2.自動(dòng)ADO.NET事務(wù):自動(dòng)事務(wù)是COM+ 提供的一個(gè)服務(wù),如果要使用此服務(wù),類需要遵從:
◆必須直接或間接從SystemEnterpriseServicedComponent派生。
◆將 TransactionAttribute 應(yīng)用此類來控制類的事務(wù)行為。
◆使用強(qiáng)名稱為組件簽名。
◆將[AutoComplete] 特性(屬性信息)應(yīng)用于類中的方法。如果含有[AutoComplete] 特性的方法調(diào)用完成而沒有錯(cuò)誤,則事務(wù)被提交,否則被回滾。
ADO.NET事務(wù)測試過程記錄:
開始用時(shí)c#做自動(dòng)事務(wù)測試實(shí)例,在使用強(qiáng)名為組件簽名時(shí),編譯時(shí)出現(xiàn)“重復(fù)屬性[assembly: AssemblyKeyFile("f:\\complusexample1.snk")]”錯(cuò)誤。用vb.net 做測試實(shí)例,一切正常。
仔細(xì)研究C# 發(fā)現(xiàn)工程中自己生成的文件:AssemblyInfo.cs中已經(jīng)包含[assembly: AssemblyKeyFile("")]條目,把此條目改為:[assembly: AssemblyKeyFile("f:\\complusexample1.snk")],同時(shí),去掉在ComPlusExample1 中的對(duì)應(yīng)屬性信息。