asp内置对象 ObjectContext 事务管理 详解


asp内置对象 ObjectContext 详解

您可以使用 ObjectContext 对象提交或放弃一项由 Microsoft Transaction Server (MTS) 管理的事务,它由 ASP 页包含的脚本初始化 。 

ASP 包含 @TRANSACTION 指令时,该页会在事务中运行,直到事务成功或失败后才会终止 。 

语法
ObjectContext.method

方法
SetComplete SetComplete 方法声明脚本不了解事务未完成的原因 。如果事务中的所有组件都调用 SetComplete,事务将完成 。 
SetAbort SetAbort 方法声明被脚本初始化的事务未完成,无法更新源 。 


事件
OnTransactionCommit 
OnTransactionAbort 


注释
ObjectContext 实现 MTS ObjectContext 对象的两种方法 。 SetAbort 方法完全终止事务 。这样,MTS 不更新在第一阶段联系的源 。事务终止时,将处理脚本的 OnTransactionAbort 事件 。

调用 SetComplete 方法并不一定意味着事务已完成 。只有脚本调用的所有事务组件都调用了 SetComplete,事务才能完成 。在大多数实例中,如果结束处理时未调用 SetAbort,脚本通常被假定为完成的,所以不一定要在脚本内调用 SetComplete 。

ObjectContext 展示了 SetAbort 和 SetComplete 以外的六种方法 。这些方法可用于脚本调用的组件,但不能直接用于 ASP 脚本 。 

示例
这里示范使用 SetAbort 和 SetCommit 的方法 。Sales.htm 文件获取处理销售请求所需的数据 。第二个文件——SalesVerify.asp 中的脚本使用两个对象——Inventory 和 Sales 处理销售 。如果 Inventory 返回了错误代码表示供销售的存货不足,就会调用 SetAbort 。如果 Inventory 对象没有返回错误代码,将会调用 SetComplete 处理销售请求 。

Sales.htm
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">

<HTML>
<HEAD>
<TITLE>Sales Order</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF"><FONT FACE="ARIAL,HELVETICA">
<H2>Sales Order Form </H2>

<FORM METHOD=POST ACTION="SalesVerify.asp"> 
<P>Please enter the product code, quantity, and your account number.
<INPUT TYPE=TEXT NAME=QuantityToBuy> 
<INPUT TYPE=TEXT NAME=ProductCode> 
<INPUT TYPE=TEXT NAME=AccountIn> 
<P>
<INPUT TYPE=SUBMIT> 
</FONT> 
</BODY>
</HTML>

SalesVerify.asp 文件
<%@ Transaction = Required %>
<%
Set CurrentQOH = Server.CreateObject("Mycomp.Inventory")
Set CurrentSales = Server.CreateObject("Mycomp.Sales")

CheckQuantity = Request("QuantityToBuy")
CheckProduct = Request("ProductCode")
QuantityStatus = CurrentQOH.CheckQOH(CheckQuantity,CheckProduct)

If QuantityStatus = None
ObjectContext.SetAbort
Response.Write "Sorry, there is not sufficient quantity on hand to process your sale."
Else 
ObjectContext.SetComplete
Account = Request("AccountIn")
Saleupdate = CurrentSales.PostIt(AccountIn)
End If
%>