您的位置:首页技术开发ASP技巧 → ADO如何提供异动功能?(BIG5)

ADO如何提供异动功能?(BIG5)

时间:2004/11/7 4:05:00来源:本站整理作者:蓝点我要评论(0)

BeginTrans/CommitTrans/Rollback方法



當您必須更新多個資料表中的資料欄位時,並確保在所有的資料表中所作的改變都被完成(確認Commit)、或者不變(撤銷復原Rollback)時,您可以使用異動(transaction)來維護資料的完整性。



例如,當您將錢從甲帳戶匯到另一個乙帳戶時,需要從甲帳戶上減去一個數並加到另一個乙帳戶上。如果其中有一個更新失敗,帳戶就不會平衡。



使用異動(transaction)功能時,對資料所做的任何改變都可撤銷復原(Rollback),或者可以確認(Commit)儲存所有對資料庫的改變。



加上異動(transaction)功能的方法,為在更新第一筆資料欄位前,先使用BeginTrans 方法,然後,只要有任何更新失敗,就可以使用RollbackTrans方法撤銷所有的更新。當您成功地更新最後一筆資料欄位之後,就可使用CommitTrans方法確認(Commit)儲存到資料庫。



ADO有三種支援異動處理的方法:BeginTrans、CommitTrans、與Rollback。但是,資料庫本身也必須支援異動處理的功能,譬如SQL Server提供異動(transaction)處理的功能,但是Access則未提供。



BeginTrans:開始一個異動處理,一旦開始一個異動處理,就必須在關閉資料庫或應用程式之前使用CommitTrans或Rollback。當應用程式結束時,沒有交付確認(Commit)的異動要自動復原。

CommitTrans:將改變儲存到資料庫中。用BeginTrans方法開啟異動處理以後,CommitTrans方法將RecordSet所有的改變儲存到資料庫。執行CommitTrans時,所有改變成為永久性的改變。

Rollback:撤銷復原,倒退或者撤銷目前異動處理中所有已改變的資料。它同時終止異動處理。

異動(transaction)例子



讓我們看一個於ASP程式碼當中使用BeginTrans/ CommitTrans/RollbackTrans提供異動(transaction)功能的例子。



本例子,使用RecordSet 的Requery方法,重新執行SELECT指令載入資料到RecordSet。



執行本例子的資料庫必須支援異動處理的功能,譬如SQL Server提供異動(transaction)處理的功能,但是Access則未提供。



若要執行本例子,請先安裝「企業網站熱門應用精選」,以便自動於SQL Server建立comPak資料庫。



譬如ASP程式碼rs4.asp如下,使用BeginTrans方法開始一個異動處理,將 [檔案下載] 資料表每一筆記錄的 [檔案下載次數] 欄位加上100,再使用CommitTrans方法將RecordSet所有的改變儲存到資料庫。或者使用Rollback方法,撤銷目前異動處理中所有已改變的資料:



<%



Set conn1 = Server.CreateObject("ADODB.Connection")



conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=comPak"



Set rs2 = Server.CreateObject("ADODB.Recordset")



sql = "SELECT * FROM 檔案下載"



rs2.Open sql,conn1,1,2,1



conn1.BeginTrans



Do while not rs2.EOF



if IsNull(rs2("檔案下載次數")) then rs2("檔案下載次數") = 100



rs2("檔案下載次數") = rs2("檔案下載次數") + 100



rs2.MoveNext



Loop



conn1.CommitTrans



'conn1.RollbackTrans



rs2.Requery



'rs2.Close



'Set rs2 = Server.CreateObject("ADODB.Recordset")



'sql = "SELECT * FROM 檔案下載"



'rs2.Open sql,conn1,1,2,1



%>



























<% Do while not rs2.EOF %>























<%



rs2.MoveNext



Loop



%>



以上的 ASP程式碼rs4.asp,於用戶端使用瀏覽器,瀏覽執行的結果,使用rs2.Requery方法重新執行SELECT指令載入資料到RecordSet,顯示異動處理後的記錄。



每執行一次,會將 [檔案下載] 資料表每一筆記錄的 [檔案下載次數] 欄位加上100。



UpdateBatch/CancelBatch (SQL Server)



您可以使用UpdateBatch方法,將多筆變更的記錄,批次寫回到資料庫。



使用UpdateBatch方法時,不必每一筆變更記錄都下一個Update方法,多筆記錄一起變更,最後再使用UpdateBatch方法,寫回到資料庫。或是使用CancelBatch方法,放棄所有的變更。



執行本例子的資料庫必須支援UpdateBatch批次變更處理的功能,譬如SQL Server提供UpdateBatch的功能,但是Access則未提供。



若要執行本例子,請先安裝「企業網站熱門應用精選」,以便自動於SQL Server建立comPak資料庫。



譬如ASP程式碼rs3.asp如下,將 [檔案下載] 資料表每一筆記錄的 [檔案下載次數] 欄位加上10,再使用UpdateBatch方法將RecordSet所有的改變儲存到資料庫。或者使用CancelBatch方法,放棄所有的變更:



<%



Set conn1 = Server.CreateObject("ADODB.Connection")



conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=comPak"



Set rs3 = Server.CreateObject("ADODB.Recordset")



sql = "SELECT * FROM 檔案下載"



rs3.Open sql,conn1,1,4



Do while not rs3.EOF



if IsNull(rs3("檔案下載次數")) then rs3("檔案下載次數") = 10



rs3("檔案下載次數") = rs3("檔案下載次數") + 10



rs3.MoveNext



Loop



rs3.UpdateBatch



'rs3.CancelBatch



rs3.Requery



%>



名稱 檔案下載檔案 檔案下載次數
<%= rs2("名稱")%> <%= rs2("檔案下載檔案")%> <%= rs2("檔案下載次數")%>
























<% Do while not rs3.EOF %>























<%



rs3.MoveNext



Loop



%>



名稱 檔案下載檔案 檔案下載次數
<%= rs3("名稱")%> <%= rs3("檔案下載檔案")%> <%= rs3("檔案下載次數")%>




<%



rs3.Close



conn1.Close



%>



以上的 ASP程式碼rs3.asp,於用戶端使用瀏覽器,瀏覽執行的結果,顯示代號重覆的記錄。



其中rs3.Open sql,conn1,1,4的4表示為批次樂觀鎖定(Batch Optimistic lock),使用UpdateBatch方法將多筆變更的記錄批次寫回到資料庫時,才鎖定此批資料記錄。



每執行一次,會將 [檔案下載] 資料表每一筆記錄的 [檔案下載次數] 欄位加上10。


相关阅读 Mac访问Windows共享文件夹Windows 7正版系统验证方法windows 8.1系统版本号查看方法Windows 8.1系统电话激活时无法输入微软返回代码解决方法Windows 8如何调整屏幕分辨率windows8.1磁盘占用100%解决方法Mac双系统如何删除Boot Camp安装的Windows分区Apple教你如何在Mac 上运行 Windows

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 VB.NET 2005编写定时关 Jquery get/post下乱码解决方法 前台gbk gb如何使用数据绑定控件显示数据ASP脚本循环语句ASP怎么提速

人气排行 轻松解决"Server Application Error"和iis"一起学习DataGridView调整列宽用ASP随机生成文件名的函数Jquery get/post下乱码解决方法 前台gbk gbODBC Drivers错误80004005的解决办法返回UPDATE SQL语句所影响的行数的方法用Javascript隐藏超级链接的真实地址两个不同数据库表的分页显示解决方案