国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

ADO如何提供異動功能?(BIG5)

2019-11-18 22:06:27
字體:
來源:轉載
供稿:網友
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

%>

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<TR>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">名稱</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">檔案下載檔案</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">檔案下載次數</FONT></TD>

</TR>

<% Do while not rs2.EOF %>

<TR>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("名稱")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("檔案下載檔案")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("檔案下載次數")%></TD>

</TR>

<%

rs2.MoveNext

Loop

%>

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

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

UpdateBatch/CancelBatch (SQL Server)

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

使用UpdateBatch方法時,不必每一筆變更記錄都下一個Update方法,多筆記錄一起變更,最後再使用UpdateBatch方法,寫回到資料庫?;蚴鞘褂肅ancelBatch方法,放棄所有的變更。

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

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

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

<%

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

%>

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<TR>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">名稱</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">檔案下載檔案</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">檔案下載次數</FONT></TD>

</TR>

<% Do while not rs3.EOF %>

<TR>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("名稱")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("檔案下載檔案")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("檔案下載次數")%></TD>

</TR>

<%

rs3.MoveNext

Loop

%>

</TABLE>

<%

rs3.Close

conn1.Close

%>

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栾城县| 马边| 兴宁市| 东兰县| 玛沁县| 汾西县| 措美县| 天长市| 炉霍县| 元氏县| 云南省| 成武县| 拜城县| 卓资县| 孟村| 遵化市| 宁城县| 佛冈县| 江源县| 文化| 六枝特区| 德化县| 北安市| 绥德县| 田林县| 武安市| 额敏县| 礼泉县| 卢龙县| 柯坪县| 民丰县| 新宾| 马龙县| 惠水县| 富宁县| 兰西县| 新竹市| 和静县| 清徐县| 南雄市| 盘山县|