一般的資料庫事務控制要求事務裡所做的操作必須在同乙個資料庫內,這樣在出現錯誤的時候才能回滾(rllback)到初始狀態。這就存在乙個問題,在分布式應用程式中,往往需要同時操作多個資料庫,使用資料庫本身的事務處理,很難滿足程式對事務控制的要求。在com+中,提供了完整的事務服務,可以利用它來完成在分布式應用程式中的事務控制。
具體過程如下
一:用vs.net生成乙個類庫 。
二:新增對system.enterpristservices的引用,具體步驟
選單:(專案-新增引用-在.net選項卡選擇system.enterpristservices-確定)
三:構建類
1:源程式
using system;
using system.enterpriseservices;
using system.data.sqlclient;
using system.reflection;
namespace complussamples?
? private void execsql(string init, string sql)?
? //新增一條記錄到資料庫?
public void add()?
? catch(exception e)?
? }?
} }
2:程式說明:
新增命名空間 using system.enterpriseservices;因為本程式使用了其中的contextutil類
[ transaction(transactionoption.required) ] 說明dll需要事務支援。
本程式的txcfgclass 類從servicedcomponent類中繼承,這樣並不會影響該類,而只是在該類中新增了兩個額外的方法,這兩個方法可以使**共享變得更加容易。
程式使用的sql server資料庫在本機執行,init1 和 init2是兩個連線資料庫的連線字串,init連線pubs資料庫,inin2連線northwind資料庫,這是sql2000中自帶的示例資料庫。add1和add2是兩條sql語句,作用是分別向兩個資料庫的表裡新增一條記錄。注意:add2是一條錯誤的語句,因為根本沒有sample表,這樣,會在執行時引起異常。(這正是我們所期望的)
在執行到add2語句時,由於它是錯誤的,所以會引發異常,轉到錯誤處理語句裡來執行。
contextutil.setabort();該語句使所有的資料庫操作回滾,這樣add1語句所插入的記錄也將不存在。(達到預期目標)
四:給程式新增強名(strong name)
1:建立一對金鑰
用來建立金鑰的工具是稱為sn.exe的共享工具。通常通過命令提示執行它,該工具可執行各種任務以生成並提取金鑰。我們需要用以下方式來執行sn.exe。
sn –k key.snk
其中key.snk 代表將儲存金鑰的檔案的名稱。它的名稱可以是任意的,不過習慣上帶有.snk字尾名。
2:簽名
簽名通常是在編譯時進行的。簽名時,使用者可利用c#屬性通知編譯器應該使用正確的金鑰檔案對dll進行簽名。要做到這一點使用者需要開啟工程中的assemblyinfo.cs檔案並進行修改。
[assembly:assemblykeyfile(「..//..//key.snk」)]
注:key.snk檔案和專案檔案在同乙個資料夾
五:編譯成dll (具體步驟)
選單:(生成-生成)
如果一切正常,就會生成dll檔案
六:使用regsvcs.exe將dll註冊到com+ services裡面
我們需要用以下方式執行regsvcs.exe
regsvcs dll檔名
如果一切正常的話,regsvcs.exe就會把dll輸入到com+ services中。
至此,已經生成並註冊了這個可以由其它程式使用的類,現在,來寫乙個控制台程式來檢驗這個類是否正常執行
七:構建客戶機
1:新建控制台應用程式專案
選單(檔案-新建-專案)
選擇控制台應用程式 ,並選擇 添入解決方案 ,確定
2:同上面的第二步一樣,新增對system.enterpriseservices的引用。
3:新增對自己剛才做好的類的引用。
選單(專案-新增引用-瀏覽),選擇剛才生成的dll,確定
4:輸入以下程式
using system;
using complussamples;
using system.enterpriseservices;
public class client }
5:將控制台程式設定為啟動項,然後編譯執行,就會看到結果。
正如希望的,第一條記錄沒有插入資料庫?
C 中的事務處理
sqlconnection myconnection new sqlconnection data source localhost initial catalog northwind integrated security sspi myconnection.open sqltransaction...
PHP MYSQLI中事務處理
mysql事務處理讓所有sql語句執行成功後才去處理,如果有一條沒有成功或者報錯就會回滾事務,防止敏感操作處理失敗。mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!mysqli autocommit false 關閉自動提交功能 sql update users...
PHP MYSQLI中事務處理
mysql事務處理讓所有sql語句執行成功後才去處理,如果有一條沒有成功或者報錯就會回滾事務,防止敏感操作處理失敗。mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!mysqli autocommit false 關閉自動提交功能 sql update users...