ADO如何提供异动功能(BIG5)
类别: ASP教程
BeginTrans/CommitTrans/Rollback方法
??您必??更新多??儋料表中的儋料?谖??r,?K催保在所有的儋料表中所作的改??都被完成(催帐Commit)、或者不??(撤湮?驮?Rollback)?r,您可以使用???樱?transaction)?砭S罪儋料的完整性。
例如,??您?㈠X?募??????R到另一??乙?????r,需要?募????羯??p去一?????K加到另一??乙???羯稀H绻?其中有一??更新失?。????艟筒???平衡。
使用???樱?transaction)功能?r,??儋料所做的任何改??都可撤湮?驮?(Rollback),或者可以催帐(Commit)?Υ嫠?有??儋料?斓母淖?。
加上???樱?transaction)功能的方法,?樵诟?新第一剐儋料?谖磺埃?先使用BeginTrans 方法,然後,只要有任何更新失?。?就可以使用RollbackTrans方法撤湮所有的更新。??您成功地更新最後一剐儋料?谖恢?後,就可使用CommitTrans方法催帐(Commit)?Υ娴劫Y料?臁<br>
ADO有三肺支援???犹?理的方法:BeginTrans、CommitTrans、陪Rollback。但是,儋料?毂旧硪脖仨?支援???犹?理的功能,譬如SQL Server提供???樱?transaction)??理的功能,但是Access?t未提供。
BeginTrans:檫始一?????犹?理,一旦檫始一?????犹?理,就必??在晷檩儋料?旎???用程式之前使用CommitTrans或Rollback。????用程式劫束?r,?]有交付催帐(Commit)的???右?自???驮?。
CommitTrans:?⒏淖??Υ娴劫Y料?熘小S寐eginTrans方法檫?????犹?理以後,CommitTrans方法?⒁ecordSet所有的改???Υ娴劫Y料?臁??绦忻ommitTrans?r,所有改??成?橛谰眯缘母淖?。
Rollback:撤湮?驮?,倒退或者撤湮目前???犹?理中所有已改??的儋料。它同?r剿止???犹?理。
???樱?transaction)例子
??我??看一??於ASP程式瘁??中使用BeginTrans/ CommitTrans/RollbackTrans提供???樱?transaction)功能的例子。
本例子,使用RecordSet 的Requery方法,重新?绦杏ELECT指令蒌入儋料到RecordSet。
?绦斜纠?子的儋料?毂仨?支援???犹?理的功能,譬如SQL Server提供???樱?transaction)??理的功能,但是Access?t未提供。
若要?绦斜纠?子,??先安砚「企?I咀站?衢T??用精啉」,以便自?屿队QL Server建立comPak儋料?臁<br>
譬如ASP程式瘁rs4.asp如下,使用BeginTrans方法檫始一?????犹?理,?? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳00,再使用CommitTrans方法?⒁ecordSet所有的改???Υ娴劫Y料?臁;蛘呤褂靡ollback方法,撤湮目前???犹?理中所有已改??的儋料:
<%
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 ?n案下蒌"
rs2.Open sql,conn1,1,2,1
conn1.BeginTrans
Do while not rs2.EOF
if IsNull(rs2("?n案下蒌次?郸quot;)) then rs2("?n案下蒌次?郸quot;) = 100
rs2("?n案下蒌次?郸quot;) = rs2("?n案下蒌次?郸quot;) + 100
rs2.MoveNext
Loop
conn1.CommitTrans
\'conn1.RollbackTrans
rs2.Requery
\'rs2.Close
\'Set rs2 = Server.CreateObject("ADODB.Recordset")
\'sql = "SELECT * FROM ?n案下蒌"
\'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">?n案下蒌?n案</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">?n案下蒌次?郸lt;/FONT></TD>
</TR>
<% Do while not rs2.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("名费")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?n案下蒌?n案")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?n案下蒌次?郸quot;)%></TD>
</TR>
<%
rs2.MoveNext
Loop
%>
以上的 ASP程式瘁rs4.asp,於用?舳耸褂??g盂器,?g盂?绦械慕Y果,使用rs2.Requery方法重新?绦杏ELECT指令蒌入儋料到RecordSet,锢示???犹?理後的????。
每?绦幸淮危????? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳00。
UpdateBatch/CancelBatch (SQL Server)
您可以使用UpdateBatch方法,?⒍喙P??更的????,批次??回到儋料?臁<br>
使用UpdateBatch方法?r,不必每一剐??更????都下一??Update方法,多剐????一起??更,最後再使用UpdateBatch方法,??回到儋料?臁;蚴鞘褂妹ancelBatch方法,放??所有的??更。
?绦斜纠?子的儋料?毂仨?支援UpdateBatch批次??更??理的功能,譬如SQL Server提供UpdateBatch的功能,但是Access?t未提供。
若要?绦斜纠?子,??先安砚「企?I咀站?衢T??用精啉」,以便自?屿队QL Server建立comPak儋料?臁<br>
譬如ASP程式瘁rs3.asp如下,?? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳0,再使用UpdateBatch方法?⒁ecordSet所有的改???Υ娴劫Y料?臁;蛘呤褂妹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 ?n案下蒌"
rs3.Open sql,conn1,1,4
Do while not rs3.EOF
if IsNull(rs3("?n案下蒌次?郸quot;)) then rs3("?n案下蒌次?郸quot;) = 10
rs3("?n案下蒌次?郸quot;) = rs3("?n案下蒌次?郸quot;) + 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">?n案下蒌?n案</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">?n案下蒌次?郸lt;/FONT></TD>
</TR>
<% Do while not rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("名费")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("?n案下蒌?n案")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("?n案下蒌次?郸quot;)%></TD>
</TR>
<%
rs3.MoveNext
Loop
%>
</TABLE>
<%
rs3.Close
conn1.Close
%>
以上的 ASP程式瘁rs3.asp,於用?舳耸褂??g盂器,?g盂?绦械慕Y果,锢示代??重覆的????。
其中rs3.Open sql,conn1,1,4的4表示?榕?次?酚^骈定(Batch Optimistic lock),使用UpdateBatch方法?⒍喙P??更的????批次??回到儋料???r,才骈定此批儋料????。
每?绦幸淮危????? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳0。
??您必??更新多??儋料表中的儋料?谖??r,?K催保在所有的儋料表中所作的改??都被完成(催帐Commit)、或者不??(撤湮?驮?Rollback)?r,您可以使用???樱?transaction)?砭S罪儋料的完整性。
例如,??您?㈠X?募??????R到另一??乙?????r,需要?募????羯??p去一?????K加到另一??乙???羯稀H绻?其中有一??更新失?。????艟筒???平衡。
使用???樱?transaction)功能?r,??儋料所做的任何改??都可撤湮?驮?(Rollback),或者可以催帐(Commit)?Υ嫠?有??儋料?斓母淖?。
加上???樱?transaction)功能的方法,?樵诟?新第一剐儋料?谖磺埃?先使用BeginTrans 方法,然後,只要有任何更新失?。?就可以使用RollbackTrans方法撤湮所有的更新。??您成功地更新最後一剐儋料?谖恢?後,就可使用CommitTrans方法催帐(Commit)?Υ娴劫Y料?臁<br>
ADO有三肺支援???犹?理的方法:BeginTrans、CommitTrans、陪Rollback。但是,儋料?毂旧硪脖仨?支援???犹?理的功能,譬如SQL Server提供???樱?transaction)??理的功能,但是Access?t未提供。
BeginTrans:檫始一?????犹?理,一旦檫始一?????犹?理,就必??在晷檩儋料?旎???用程式之前使用CommitTrans或Rollback。????用程式劫束?r,?]有交付催帐(Commit)的???右?自???驮?。
CommitTrans:?⒏淖??Υ娴劫Y料?熘小S寐eginTrans方法檫?????犹?理以後,CommitTrans方法?⒁ecordSet所有的改???Υ娴劫Y料?臁??绦忻ommitTrans?r,所有改??成?橛谰眯缘母淖?。
Rollback:撤湮?驮?,倒退或者撤湮目前???犹?理中所有已改??的儋料。它同?r剿止???犹?理。
???樱?transaction)例子
??我??看一??於ASP程式瘁??中使用BeginTrans/ CommitTrans/RollbackTrans提供???樱?transaction)功能的例子。
本例子,使用RecordSet 的Requery方法,重新?绦杏ELECT指令蒌入儋料到RecordSet。
?绦斜纠?子的儋料?毂仨?支援???犹?理的功能,譬如SQL Server提供???樱?transaction)??理的功能,但是Access?t未提供。
若要?绦斜纠?子,??先安砚「企?I咀站?衢T??用精啉」,以便自?屿队QL Server建立comPak儋料?臁<br>
譬如ASP程式瘁rs4.asp如下,使用BeginTrans方法檫始一?????犹?理,?? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳00,再使用CommitTrans方法?⒁ecordSet所有的改???Υ娴劫Y料?臁;蛘呤褂靡ollback方法,撤湮目前???犹?理中所有已改??的儋料:
<%
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 ?n案下蒌"
rs2.Open sql,conn1,1,2,1
conn1.BeginTrans
Do while not rs2.EOF
if IsNull(rs2("?n案下蒌次?郸quot;)) then rs2("?n案下蒌次?郸quot;) = 100
rs2("?n案下蒌次?郸quot;) = rs2("?n案下蒌次?郸quot;) + 100
rs2.MoveNext
Loop
conn1.CommitTrans
\'conn1.RollbackTrans
rs2.Requery
\'rs2.Close
\'Set rs2 = Server.CreateObject("ADODB.Recordset")
\'sql = "SELECT * FROM ?n案下蒌"
\'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">?n案下蒌?n案</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">?n案下蒌次?郸lt;/FONT></TD>
</TR>
<% Do while not rs2.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("名费")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?n案下蒌?n案")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?n案下蒌次?郸quot;)%></TD>
</TR>
<%
rs2.MoveNext
Loop
%>
以上的 ASP程式瘁rs4.asp,於用?舳耸褂??g盂器,?g盂?绦械慕Y果,使用rs2.Requery方法重新?绦杏ELECT指令蒌入儋料到RecordSet,锢示???犹?理後的????。
每?绦幸淮危????? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳00。
UpdateBatch/CancelBatch (SQL Server)
您可以使用UpdateBatch方法,?⒍喙P??更的????,批次??回到儋料?臁<br>
使用UpdateBatch方法?r,不必每一剐??更????都下一??Update方法,多剐????一起??更,最後再使用UpdateBatch方法,??回到儋料?臁;蚴鞘褂妹ancelBatch方法,放??所有的??更。
?绦斜纠?子的儋料?毂仨?支援UpdateBatch批次??更??理的功能,譬如SQL Server提供UpdateBatch的功能,但是Access?t未提供。
若要?绦斜纠?子,??先安砚「企?I咀站?衢T??用精啉」,以便自?屿队QL Server建立comPak儋料?臁<br>
譬如ASP程式瘁rs3.asp如下,?? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳0,再使用UpdateBatch方法?⒁ecordSet所有的改???Υ娴劫Y料?臁;蛘呤褂妹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 ?n案下蒌"
rs3.Open sql,conn1,1,4
Do while not rs3.EOF
if IsNull(rs3("?n案下蒌次?郸quot;)) then rs3("?n案下蒌次?郸quot;) = 10
rs3("?n案下蒌次?郸quot;) = rs3("?n案下蒌次?郸quot;) + 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">?n案下蒌?n案</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">?n案下蒌次?郸lt;/FONT></TD>
</TR>
<% Do while not rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("名费")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("?n案下蒌?n案")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("?n案下蒌次?郸quot;)%></TD>
</TR>
<%
rs3.MoveNext
Loop
%>
</TABLE>
<%
rs3.Close
conn1.Close
%>
以上的 ASP程式瘁rs3.asp,於用?舳耸褂??g盂器,?g盂?绦械慕Y果,锢示代??重覆的????。
其中rs3.Open sql,conn1,1,4的4表示?榕?次?酚^骈定(Batch Optimistic lock),使用UpdateBatch方法?⒍喙P??更的????批次??回到儋料???r,才骈定此批儋料????。
每?绦幸淮危????? [?n案下蒌] 儋料表每一剐????的 [?n案下蒌次?递 ?谖患由媳0。
- 上一篇: ADO如何建立修改?除资料表呢(BIG5)
- 下一篇: ADO如何善用RECORDSET组件呢
-= 资 源 教 程 =-
文 章 搜 索