利用ASP實(shí)現(xiàn)事務(wù)處理的方法
在開(kāi)發(fā)Web應(yīng)用時(shí),無(wú)一例外地需要訪問(wèn)數(shù)據(jù)庫(kù),以完成對(duì)數(shù)據(jù)的查詢(xún)、插入、更新、刪除等操作。受應(yīng)用邏輯的影響,有時(shí)需要將多條數(shù)據(jù)庫(kù)操作指令組成一個(gè)工作單元(事務(wù))。在數(shù)據(jù)庫(kù)中,所謂事務(wù)是指一組邏輯操作單元,它使數(shù)據(jù)從一種狀態(tài)變換到另一種狀態(tài)。為確保數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,應(yīng)當(dāng)用離散的成組的邏輯單元操作數(shù)據(jù):當(dāng)它全部完成時(shí),數(shù)據(jù)的一致性可以保持;而當(dāng)單元中的一部分操作失敗時(shí),整個(gè)事務(wù)會(huì)被全部忽略,所有從起始點(diǎn)以后的操作全部退回到開(kāi)始狀態(tài)。 ? ??? 實(shí)際上,在默認(rèn)方式下對(duì)數(shù)據(jù)庫(kù)的每一次操作都是隱含的事務(wù)處理。本文以一個(gè)典型的用戶(hù)注冊(cè)程序?yàn)槔榻B三種利用ASP實(shí)現(xiàn)事務(wù)處理的方法:基于ASP數(shù)據(jù)庫(kù)組件的解決方法、基于數(shù)據(jù)庫(kù)內(nèi)部的事務(wù)處理機(jī)制的解決方法和基于MTS組件的解決方法。 ? ??? 程序功能 ??? 在SQL Server數(shù)據(jù)庫(kù)中建立兩個(gè)表:USER表和USERDOC表。其中USER表中存放的是注冊(cè)用戶(hù)的用戶(hù)名和密碼,USERDOC表中存放的是該注冊(cè)用戶(hù)的個(gè)人資料,并且以用戶(hù)名為索引。下面是表USER和USERDOC的定義: Create Table USER(userName varchar(30),userPasswd varchar(30)) Create Table USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50)) ? ??? 當(dāng)用戶(hù)請(qǐng)求注冊(cè)時(shí),ASP腳本先將用戶(hù)名和密碼插入到USER表中,然后在USERDOC表中插入用戶(hù)個(gè)人信息(年齡、性別、聯(lián)系電話(huà)和家庭住址等)。同時(shí),應(yīng)用程序還必須保證USER表中的每一條記錄在USERDOC表中都有相應(yīng)的記錄。 ? 方法一 利用ASP內(nèi)置ADO組件中的Connection對(duì)象可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)操作的事務(wù)性處理。Connection對(duì)象的部分方法如下: ●Connection.BeginTrans方法:?jiǎn)?dòng)一個(gè)事務(wù); ●Connection.CommitTrans方法:完成/提交一個(gè)事務(wù); ●Connection.RollBackTrans方法:撤消/放棄一個(gè)事務(wù)。 //啟動(dòng)一個(gè)事務(wù)操作