国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - 利用ASP實現事務處理的方法

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

2019-10-18 11:08asp教程網 ASP教程

在開發Web應用時,無一例外地需要訪問數據庫,以完成對數據的查詢、插入、更新、刪除等操作。受應用邏輯的影響,有時需要將多條數據庫操作指令組成一個工作單元(事務)。在數據庫中,所謂事務是指一組邏輯操作單元,它

 在開發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方法:撤消/放棄一個事務。  
//啟動一個事務操作  
  

  1. <% Conn.BeginTrans %>    
  2. <% sqlText="Insert into USER(userName,userPasswd) values('" %>   
  3. <% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>   
  4. <% conn.execute(sqlText) %>   
  5. <% if conn.Errors.Count>0 then %>    
  6. <% conn.Errors.Clear %>   
  7. //如果插入數據操作失敗,則事務向前回滾   
  8. <% conn.RollBackTrans %>    
  9. <% response.Redirct RegisterFail.html %>   
  10. <% end if %>   
  11. <% sqlText="Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>   
  12. <% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Age") %>   
  13. <% sqlText=sqlText & ",'" & request ("PhoneNum") & "','" %>   
  14. <% sqlText=sqlText & request("Address") & "') " %>   
  15. //執行事務單元中的第二條插入語句   
  16. <% conn.execute(sqlText) %>    
  17. <% if conn.Errors.Count>0 then %>   
  18. <% conn.Errors.Clear %>   
  19. //如果操作失敗,則事務向前回滾   
  20. <% conn.RollBackTrans %>    
  21. <% response.Redirct RegisterFail.html %>   
  22. <% end if %>   
  23. //如果整個事務操作執行正確,則提交事務   
  24. <% Conn.CommitTrans %>    
  25. //轉向注冊成功處理頁面   
  26. <% response.Redirct RegisterOk.html %>  


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

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

在數據庫中生成存儲過程的主要代碼如下:  

  1. Create proc RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) ) as begin   
  2. //顯示定義并開始一個事務   
  3. begin tran    
  4. insert into USER(userName,userPasswd) values(@usrName,@usrPasswd)   
  5. if @@error<>0   
  6. begin   
  7. //操作失敗,則事務回滾   
  8. rollback tran    
  9. //返回存儲過程,并設置返回碼為事務操作失敗   
  10. return -1    
  11. end   
  12. insert into USERDOC(userName,age,sex,PhoneNumber,Address)    
  13. values(@Usrname,@age,@PhoneNum,@Address)   
  14. if @@error<>0   
  15. begin   
  16. //操作失敗,則事務回滾   
  17. rollback tran    
  18. return -1   
  19. end   
  20. //如果操作執行正確,則提交事務   
  21. commit tran    
  22. return 0   
  23. end   
  24. 在ASP腳本中調用數據庫存儲過程的主要代碼如下:   
  25. <% Set Comm=server.CreateObject   
  26. ("ADODB.Command") %>   
  27. <% Set Comm.ActiveConnection=conn %>   
  28. <% Comm.CommandType=adCmdStoredProc %>   
  29. <% Comm.CommandText="RegisterUser" %>   
  30. //創建存儲過程返回參數對象   
  31. <% Set RetCode=Comm.CreateParameter   
  32. ("RetCode",adInteger,adParamReturnValue) %>    
  33. //創建存儲過程輸入參數對象   
  34. <% Set usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %>    
  35. <% Set usrPwd=Comm.CreateParameter   
  36. ("usrPasswd",adVarchar,adParamInput,30) %>   
  37. <% Set age=Comm.CreateParameter("age",adInteger,adParamInput) %>   
  38. <% Set PhoneNum=Comm.CreateParameter   
  39. ("PhoneNum",adVarchar,adParamInput, 20) %>   
  40. <% Set Address=Comm.CreateParameter("Address",adVarchar,adParamInput,50) %>   
  41. <% Comm.Parameters.Append usrName %>   
  42. <% Comm.Parameters.Append usrPwd %>   
  43. <% Comm.Parameters.Append age %>   
  44. <% Comm.Parameters.Append PhoneNum %>   
  45. <% Comm.Parameters.Append Address %>   
  46. <% Comm.Parameters("usrName")=request("usrName") %>   
  47. <% Comm.Parameters("usrPasswd")=request("usrPasswd") %>   
  48. <% Comm.Parameters("age")=request("age") %>   
  49. <% Comm.Parameters("PhoneNum")=request("PhoneNum") %>   
  50. <% Comm.Parameters("Address")=request("Address") %>   
  51. <% Comm.Execute %>   
  52. <% RetValue=Cint(Comm("RetCode")) %>   
  53. //根據數據庫存儲過程返回代碼判斷注冊是否成功   
  54. <% if RetValue< 0 then %>    
  55. <% response.Redirect RegisterFail.html %>   
  56. <% else %>   
  57. <% response.Redirect RegisterOk.html %>   
  58. <% end if %>   



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

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

@TRANSACTION指令必須在一頁中的第一行,否則將產生錯誤。當頁面中ASP腳本處理結束時,當前事務即告結束。  

  1. <%@ TRANSACTION=Required Language=   
  2. VB Script %>   
  3. //事務執行成功觸發事件   
  4. <% Sub OnTransactionCommit() %>    
  5. <% response.Redirect RegisterOk.html %>   
  6. <% End Sub %>   
  7. //事物執行失敗觸發事件   
  8. <% Sub OnTransactionAbort() %>    
  9. <% response.Redirect RegisterFail.html %>   
  10. <% End Sub %>   
  11. <% sqlText="Insert into USER(userName,userPasswd) values('" %>   
  12. <% sqlText=sqlText & request("usrName") & "','" &request("usrPasswd")&"') " %>   
  13. <% conn.execute(sqlText) %>   
  14. <% if conn.Errors.Count>0 then %>   
  15. <% conn.Errors.Clear %>   
  16. <% ObjectContext.SetAbort %>   
  17. <% end if %>   
  18. <% sqlText="Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>   
  19. <% sqlText=sqlText & "values('" & request("usrName")& "', " & request("Age") %>   
  20. <% sqlText=sqlText & ",'" & request("PhoneNum") & "','" %>   
  21. <% sqlText=sqlText & request("Address") & "') " %>   
  22. <% conn.execute(sqlText) %>   
  23. <% if conn.Errors.Count>0 then %>   
  24. <% conn.Errors.Clear %>   
  25. <% ObjectContext.SetAbort %>   
  26. <% end if %>   
  27. <% ObjectContext.SetComplete %>   


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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品美女久久久久久久久久久 | 一本大道久久a久久精二百 国产欧美视频一区二区 | 久久久亚洲精品中文字幕 | 免费国产wwwwwww网站 | 亚洲视频一区 | 中文字幕成人 | 在线免费观看h片 | 综合五月 | 国产精品成人国产乱一区 | 一级黄色片a级 | 成人午夜在线播放 | 久久精品久久久久久 | 欧美精品一区二区三区四区五区 | 成人免费小视频 | 免费成人在线看 | 欧美中文字幕一区二区 | 日韩在线观看一区 | 国产亚洲精品美女久久久久久久久久 | 久久波多野结衣 | 国产精品国产三级国产aⅴ 成人在线免费看 | 一级毛片免费看 | 久久精品噜噜噜成人av农村 | 狠狠操夜夜操 | 国产黄色影视 | 久久久久久久久久久网站 | 成人久久久久久久 | av成人在线观看 | 人人射av | 一级做a爰片性色毛片2021 | 99国产精品99久久久久久 | 欧美精品在线看 | 成人午夜视频在线 | 天天操天天干视频 | 26uuu成人免费毛片 | 蜜桃成人在线 | 国产日韩视频 | 一级在线免费视频 | 欧美日韩在线免费 | 久久久国产精品 | 五月激情综合 | 国产精品资源在线 |