狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Asp事務處理

admin
2011年2月16日 8:56 本文熱度 2632
在編程中,經(jīng)常需要使用事務。所謂事務,就是一系列必須都成功的操作,只要有一步操作失敗,所有其他的步驟也必須撤銷。比如用ASP開發(fā)一個網(wǎng)絡硬盤系統(tǒng),其用戶注冊部分要做的事有:
  1、將用戶信息記入數(shù)據(jù)庫
  2、為用戶開個文件夾用于存儲
  3、初始化用戶操作日志
  這三步必須使用事務,否則萬一磁盤操作失敗,而沒有撤銷數(shù)據(jù)庫操作,就會造成只能登陸而不能操作的“死用戶”現(xiàn)象。
  由于數(shù)據(jù)庫系統(tǒng)特殊的發(fā)展歷史,小至Access,大到DB2,無不帶有事務支持。因此上述步驟可以如下表示:
以下是引用片段:
On Error Resume Next
 第一步:
  在事務環(huán)境下把用戶信息記入數(shù)據(jù)庫
 If Err Then
  關閉連接
  退出
 Else
  第二步:創(chuàng)建文件夾
  If Err Then
   回滾第一步數(shù)據(jù)庫操作,退出
  Else
   第三步:在事務環(huán)境下操作日志數(shù)據(jù)庫
   If Err Then
    回滾第一步操作,刪除第二步建立的文件夾
    退出
   End If
  End If
 End If
 提交第一步數(shù)據(jù)庫操作的事務
 提交第二步數(shù)據(jù)庫操作的事務
End
  每一步都需要進行判斷,如果失敗,還需要手工回滾前面多步操作,使程序變得復雜、難懂。如果今后更新了程序,增加其他步驟,還需要嵌套更多層的If...Else...End If,使程序流程更加復雜。
  正確的解決辦法是使用ASP的事務控制功能。IIS通過和MTS服務聯(lián)系,可以控制多種支持事務的系統(tǒng),當程序發(fā)出“失敗”的信號時,所有支持事務的系統(tǒng)均將自動回滾,即使操作已經(jīng)正式完成;對不支持事務的操作也提供了方便的手工回滾方式。上面的例子用ASP事務控制功能重寫如下:
復制代碼 代碼如下:
<%@ TRANSACTION = Required %>
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open ....
Conn.Execute "INSERT...."
Conn.Close
Set Conn=Nothing
Set Conn2=Server.CreateObject("ADODB.Connection")
Conn2.Open ....
Conn2.Execute "INSERT...."
Conn2.Close
Set Conn2=Nothing
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
If Err Then
ObjectContext.SetAbort '通知所有支持事務的組件回滾,并運行手工回滾代碼
Else
ObjectContext.SetComplete
End If
Set FSO=Nothing
Sub OnTransactionAbort
Response.Write "錯誤"
FSO.DeleteFile Server.Mappath("a.txt") 'FSO的手工回滾——刪除文件夾
End Sub
Sub OnTransactionCommit
Response.Write "勝利完成任務"
End Sub
%>
  第一行的<%@ TRANSACTION = Required %>表示這一頁ASP文件需要MTS的事務支持。中間的各個操作都按普通順序書寫,而不用考慮回滾問題。在程序最后判斷是否有錯誤。如果有,調用ObjectContext的SetAbort方法,IIS會通過MTS服務通知所有支持事務的組件回滾(主要是數(shù)據(jù)庫),并且運行Sub OnTransactionAbort對不支持事務的操作手工回滾;如果沒有發(fā)生錯誤,調用ObjectContext的SetComplete方法,則會運行Sub OnTransactionCommit來顯示成功的消息。
  整個ASP程序不需要為判斷錯誤和回滾操作書寫多余的代碼,只須在最后進行判斷,即使今后增加了多步操作,也只需要在Sub OnTransactionAbort中進行控制即可,非常方便,程序員可以專注于過程編寫而不是書寫糾錯代碼。
  其實ASP還提供了許多更有用的功能,等著我們使用,千萬不要以為ASP使用腳本語言,功能就一定弱。
以下是引用片段:
<%
'asp事務處理。
'測試數(shù)據(jù)庫為sql server,服務器為本機,數(shù)據(jù)庫名為test,表名為a,兩個字段id(int)主鍵標識,num(int)
set conn=server.CreateObject("adodb.connection")
strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
conn.Open strConn
'以上代碼建立數(shù)據(jù)庫連接
conn.BeginTrans '事務開始
strSql1="update a set num=1000 where id=24" '第一個sql語句為update。(語法正確)
strSql2="insert into a(num) values('a')" '第二個sql語句為錯誤的sql語句
strSql3="insert into a(num) values(33333)" '第三個sql語句為正確的sql語句
call conn.execute(strSql1)
call conn.execute(strSql2)
call conn.execute(strSql3)
if conn.Errors.Count=0 then
conn.CommitTrans '如果沒有conn錯誤,則執(zhí)行事務提交
else
conn.RollbackTrans '否則回滾
end if
%>
以上代碼經(jīng)調試,可以正常的進行事務處理。但是有時候,我們并不想將編譯錯誤顯示給用戶。
則我們需要在conn.BeginTrans后面加上On error resume next
但是因為用到了On error resume next。conn.Errors.Count只能獲得最后一個數(shù)據(jù)庫操作的conn返回的結果 。上面的三個sql語句,因為最后一個sql語句是正確的,則此事務處理就無效了。那我們需要對出錯處理作出相對應的修改。
if conn.Errors.Count=0 then應該改為if err.number=0 then
這樣,我們可以在數(shù)據(jù)庫回滾后同時做出其他相對應的操作或者提示。修改后的代碼如下:
以下是引用片段:
<%
set conn=server.CreateObject("adodb.connection")
strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
conn.Open strConn
'以上代碼建立數(shù)據(jù)庫連接
conn.BeginTrans '事務開始
on error resume next '增加的代碼
strSql1="update a set num=1000 where id=24" '第一個sql語句為update。(語法正確)
strSql2="insert into a(num) values('a')" '第二個sql語句為錯誤的sql語句
strSql3="insert into a(num) values(33333)" '第三個sql語句為正確的sql語句
call conn.execute(strSql1)
call conn.execute(strSql2)
call conn.execute(strSql3)
if err.number =0 then
conn.CommitTrans '如果沒有conn錯誤,則執(zhí)行事務提交
else
conn.RollbackTrans '否則回滾
'回滾后的其他操作
strerr=err.Description
Response.Write "數(shù)據(jù)庫錯誤!錯誤日志:<font color=red>"&strerr &"</font>"
Response.End
end if
%>

該文章在 2011/2/16 8:56:29 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved