亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

利用ASP實現事務處理的方法

2019-11-18 19:26:06
字體:
來源:轉載
供稿:網友

    在開發Web應用時,無一例外地需要訪問數據庫,以完成對數據的查詢、插入、更新、刪除等操作。受應用邏輯的影響,有時需要將多條數據庫操作指令組成一個工作單元(事務)。在數據庫中,所謂事務是指一組邏輯操作單元,它使數據從一種狀態變換到另一種狀態。為確保數據庫中數據的一致性,應當用離散的成組的邏輯單元操作數據:當它全部完成時,數據的一致性可以保持;而當單元中的一部分操作失敗時,整個事務會被全部忽略,所有從起始點以后的操作全部退回到開始狀態。

    實際上,在默認方式下對數據庫的每一次操作都是隱含的事務處理。本文以一個典型的用戶注冊程序為例,介紹三種利用asp實現事務處理的方法:基于ASP數據庫組件的解決方法、基于數據庫內部的事務處理機制的解決方法和基于MTS組件的解決方法。
 
    程序功能
    在SQL Server數據庫中建立兩個表:USER表和USERDOC表。其中USER表中存放的是注冊用戶的用戶名和密碼,USERDOC表中存放的是該注冊用戶的個人資料,并且以用戶名為索引。下面是表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))

    當用戶請求注冊時,ASP腳本先將用戶名和密碼插入到USER表中,然后在USERDOC表中插入用戶個人信息(年齡、性別、聯系電話和家庭住址等)。同時,應用程序還必須保證USER表中的每一條記錄在USERDOC表中都有相應的記錄。

方法一
利用ASP內置ADO組件中的Connection對象可以實現對數據庫操作的事務性處理。Connection對象的部分方法如下:
●Connection.BeginTrans方法:啟動一個事務;
●Connection.CommitTrans方法:完成/提交一個事務;
●Connection.RollBackTrans方法:撤消/放棄一個事務。
//啟動一個事務操作
<% Conn.BeginTrans %> 
<% sqlText="Insert into USER(userName,userPasswd) values('" %>
<% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %> 
<% conn.Errors.Clear %>
//如果插入數據操作失敗,則事務向前回滾
<% conn.RollBackTrans %> 
<% response.Redirct RegisterFail.html %>
<% end if %>
<% sqlText="Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>
<% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Age") %>
<% sqlText=sqlText & ",'" & request ("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
//執行事務單元中的第二條插入語句
<% conn.execute(sqlText) %> 
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果操作失敗,則事務向前回滾
<% conn.RollBackTrans %> 
<% response.Redirct RegisterFail.html %>
<% end if %>
//如果整個事務操作執行正確,則提交事務
<% Conn.CommitTrans %> 
//轉向注冊成功處理頁面
<% response.Redirct RegisterOk.html %> 


方法二
可以利用數據庫系統內部的事務處理機制,通過在數據庫服務器中編寫包含事務的存儲過程,完成對數據操作的事務處理。同時,利用ADO組件調用存儲過程,還可以根據存儲過程的返回代碼判斷事務處理是否執行成功。

在數據庫系統中,每一條SQL語句都是一個事務。因此可以保證每條語句要么完成,要么退回到開始之處。但是如果希望一組SQL語句的操作要么全部完成,要么全部無效,就需要利用數據庫的事務處理機制來實現。

在數據庫中生成存儲過程的主要代碼如下:
Create PRoc RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) ) as begin
//顯示定義并開始一個事務
begin tran 
insert into USER(userName,userPasswd) values(@usrName,@usrPasswd)
if @@error<>0
begin
//操作失敗,則事務回滾
rollback tran 
//返回存儲過程,并設置返回碼為事務操作失敗
return -1 
end
insert into USERDOC(userName,age,sex,PhoneNumber,Address) 
values(@Usrname,@age,@PhoneNum,@Address)
if @@error<>0
begin
//操作失敗,則事務回滾
rollback tran 
return -1
end
//如果操作執行正確,則提交事務
commit tran 
return 0
end
在ASP腳本中調用數據庫存儲過程的主要代碼如下:
<% Set Comm=server.CreateObject
("ADODB.Command") %>
<% Set Comm.ActiveConnection=conn %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegisterUser" %>
//創建存儲過程返回參數對象
<% Set RetCode=Comm.CreateParameter
("RetCode",adInteger,adParamReturnValue) %> 
//創建存儲過程輸入參數對象
<% Set usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %> 
<% Set usrPwd=Comm.CreateParameter
("usrPasswd",adVarchar,adParamInput,30) %>
<% Set age=Comm.CreateParameter("age",adInteger,adParamInput) %>
<% Set PhoneNum=Comm.CreateParameter
("PhoneNum",adVarchar,adParamInput, 20) %>
<% Set Address=Comm.CreateParameter("Address",adVarchar,adParamInput,50) %>
<% Comm.Parameters.Append usrName %>
<% Comm.Parameters.Append usrPwd %>
<% Comm.Parameters.Append age %>
<% Comm.Parameters.Append PhoneNum %>
<% Comm.Parameters.Append Address %>
<% Comm.Parameters("usrName")=request("usrName") %>
<% Comm.Parameters("usrPasswd")=request("usrPasswd") %>
<% Comm.Parameters("age")=request("age") %>
<% Comm.Parameters("PhoneNum")=request("PhoneNum") %>
<% Comm.Parameters("Address")=request("Address") %>
<% Comm.Execute %>
<% RetValue=Cint(Comm("RetCode")) %>
//根據數據庫存儲過程返回代碼判斷注冊是否成功
<% if RetValue< 0 then %> 
<% response.Redirect RegisterFail.html %>
<% else %>
<% response.Redirect RegisterOk.html %>
<% end if %>


方法三
利用MTS(Microsoft Transaction Server)組件的事務處理機制實現事務處理時,需要特別注意的是,這種機制下的事務不能跨越多個ASP頁,如果一個事務處理需要來自多個組件的對象,則須將對這些對象的操作組合在一個ASP頁中。

首先需要在頁首添加指令@TRANSACTION,將一個ASP頁面聲明為事務性。

@TRANSACTION指令必須在一頁中的第一行,否則將產生錯誤。當頁面中ASP腳本處理結束時,當前事務即告結束。
<%@ TRANSACTION=Required Language=
VB Script %>
//事務執行成功觸發事件
<% Sub OnTransactionCommit() %> 
<% response.Redirect RegisterOk.html %>
<% End Sub %>
//事物執行失敗觸發事件
<% Sub OnTransactionAbort() %> 
<% response.Redirect RegisterFail.html %>
<% End Sub %>
<% sqlText="Insert into USER(userName,userPasswd) values('" %>
<% sqlText=sqlText & request("usrName") & "','" &request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% end if %>
<% sqlText="Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>
<% sqlText=sqlText & "values('" & request("usrName")& "', " & request("Age") %>
<% sqlText=sqlText & ",'" & request("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% end if %>
<% ObjectContext.SetComplete %>


方案比較
從靈活的角度考慮,選擇采用ASP數據庫組件的方法具有一定的優勢:既可以選用ADO數據庫組件完成事務處理,同時還可以根據實際需要,定制自己的數據庫組件(只要滿足ASP組件編寫規范即可)。如果從數據庫事務處理的可靠性等角度考慮,則采用數據庫內部的事務處理存儲過程更好。這樣可以直接利用數據庫事務機制完成應用程序的邏輯事務處理,安全可靠,并且減少了Web服務器與數據庫服務器之間的數據交互。這一點對分布式數據庫系統尤為重要。采用MTS組件的事務處理方法的優勢在于:由MTS服務器直接控制和管理組件(在MTS中注冊的組件)操作的完成和撤消,具有良好的擴展空間和應用前景,可以充分發揮MTS的技術優勢,增強網絡應用的容錯性能,提高IIS Web服務器的動態性能。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲成av人片在线观看桃| 午夜精品久久久久久久男人的天堂| 成人亚洲欧美一区二区三区| 亚洲欧洲国产伦综合| 成人精品aaaa网站| 97碰在线观看| 亚洲高清色综合| 精品日韩中文字幕| 91av视频在线| 欧美日韩第一页| 成人美女免费网站视频| 亚洲高清一二三区| 欧美成人精品h版在线观看| 久久精品国产清自在天天线| 欧美理论电影网| 亚洲日韩中文字幕在线播放| 国产成人精品免高潮在线观看| 国产精品日韩一区| 亚洲欧美日本另类| 久久久久免费视频| 国产精品十八以下禁看| 色天天综合狠狠色| 欧美劲爆第一页| 久久久久久国产精品三级玉女聊斋| 亚洲a∨日韩av高清在线观看| 日本久久精品视频| 一区二区三区天堂av| 日韩在线观看免费高清| 欧美裸体男粗大视频在线观看| 久久免费视频这里只有精品| 91理论片午午论夜理片久久| 亚洲色图在线观看| 中文字幕在线成人| 欧美激情精品久久久久久久变态| 欧美激情在线观看| 国产亚洲欧洲高清一区| 88国产精品欧美一区二区三区| 97国产精品视频人人做人人爱| 久久国产精彩视频| 日韩美女av在线免费观看| 欧美一区二区三区四区在线| 97热精品视频官网| 欧美高清视频一区二区| 姬川优奈aav一区二区| 影音先锋欧美在线资源| 亚洲男人天堂2024| 国产精品久久久久久婷婷天堂| 久久久久久91| 国产精品久久一区主播| 久久精品中文字幕免费mv| 亚洲欧美日韩中文视频| xxxxx91麻豆| 97在线视频一区| 日韩av在线免播放器| 色噜噜亚洲精品中文字幕| 国产精品亚洲自拍| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品69av| 日韩免费视频在线观看| 亚洲成年人在线| 国产精品中文在线| 色婷婷综合久久久久中文字幕1| 久久久精品网站| 日本午夜在线亚洲.国产| 久久成人av网站| 亚洲性日韩精品一区二区| 国产极品精品在线观看| 国产不卡在线观看| 91手机视频在线观看| 狠狠色狠狠色综合日日小说| 成人在线激情视频| 综合av色偷偷网| 在线亚洲男人天堂| 日韩av有码在线| 国产综合视频在线观看| 久久夜色精品国产亚洲aⅴ| 在线播放日韩av| 色狠狠av一区二区三区香蕉蜜桃| 亚洲成人激情图| 欧美激情久久久久久| 欧美综合第一页| www亚洲精品| 亚洲美女性生活视频| 国产在线视频一区| 亚洲综合成人婷婷小说| www.国产一区| 亲爱的老师9免费观看全集电视剧| 日韩精品视频免费在线观看| 亚洲iv一区二区三区| 久久久久久久久久久免费| 国产人妖伪娘一区91| 欧美一区二区三区图| 国产va免费精品高清在线| 国产欧美一区二区三区久久人妖| 久久精品在线视频| 一区二区三区在线播放欧美| 91精品国产亚洲| 国产精品爱久久久久久久| 亚洲欧美在线看| 精品国产区一区二区三区在线观看| 欧美主播福利视频| 57pao国产成人免费| 91精品国产色综合久久不卡98| 欧美精品手机在线| 成人网页在线免费观看| 中日韩午夜理伦电影免费| 久久久久久久国产精品视频| 亚洲欧美日韩国产中文专区| 日韩精品在线观看视频| 在线观看国产欧美| 91精品国产色综合| 久久99精品视频一区97| 5252色成人免费视频| 精品国产欧美一区二区三区成人| 性欧美亚洲xxxx乳在线观看| 精品中文字幕视频| 欧美日韩国产成人在线观看| 亚洲色图综合久久| 欧美一级片免费在线| 欧美激情极品视频| 国产97在线|亚洲| 国产在线a不卡| 国内精品久久久久久久| 国产在线拍揄自揄视频不卡99| 在线观看国产精品日韩av| 97香蕉超级碰碰久久免费软件| 亚洲毛片在线免费观看| 91久久夜色精品国产网站| 欧美精品www| 日本精品视频在线播放| 国产成人福利网站| 国产精品黄色影片导航在线观看| 成人黄色大片在线免费观看| 久久久精品2019中文字幕神马| 亚洲一区二区中文字幕| 欧美一级成年大片在线观看| 日韩av手机在线| 日韩欧美一区视频| 久久久久www| 欧美日韩一区免费| 久久97久久97精品免视看| 精品亚洲va在线va天堂资源站| 一个人看的www欧美| 国产精品白丝jk喷水视频一区| 亚洲国模精品一区| 欧美激情乱人伦一区| 亚洲va男人天堂| 日韩在线中文字| 久久夜色精品国产亚洲aⅴ| 国产精品扒开腿做爽爽爽男男| 色青青草原桃花久久综合| 亚洲国产小视频在线观看| 在线播放日韩欧美| 欧美理论电影在线观看| 在线免费观看羞羞视频一区二区| 日韩中文字幕在线视频播放| 91人人爽人人爽人人精88v| 亚洲欧美日韩国产中文专区| 国模私拍视频一区| 91免费精品国偷自产在线| 精品一区二区三区三区| 色综合影院在线| 国产精品久久久久国产a级| 欧美日韩国产综合视频在线观看中文|