您现在的位置: 军旅同心-旅游自驾-军旅文学 >> 读书赏析 >> 学习园地 >> 电脑网络 >> 技术文章 >> 正文
ASP 3.0高级编程(四十一)
作者:采集员 文章来源:来源于网络 点击数: 更新时间:2005-9-10 12:35:28
pdate = Server.CreateObject("ADODB.Command")

' Set the properties of the command
With cmdUpdate
       .ActiveConnection = strConn
       .commandText = "usp_UpdatePrices"
       .commandType = adCmdStroreProc
但这里正是差异所在。我们仅是通过Execute方法传递参数给存储过程,而不是创建参数并添加到集合中。
       ' Execute the command
       .Execute lngRecs, Array(strType, curPercent), adExecuteNoRecords
End With
这里使用了Array函数,将单个变量转换为数组,以适于方法调用。这种方法当然也有缺点:
? 只能使用输入参数。因为不能指定参数的类型和传递方向,而缺省为输入参数。
? 如果要多次调用存储过程,这种方法速度就比较慢,因为ADO将向数据存储询问参数的内容及数据类型。
集合方法和数组方法之间在速度上的差异非常之小,几乎可以忽略。所以,如果只有输入参数,可随便使用哪一种。实际上,人们更喜欢使用Parameters集合的方法,尽管它稍为繁琐,但是使参数的属性更加明确。
4.  输出参数
我们已经知道如何获得受命令影响的记录数,如果需要更多信息,却又不想返回一个记录集,怎么办?也许想从存储过程中返回两个或三个值,但又不想费心创建一个记录集。在这时,可以定义一个输出参数,其值由存储过程提供。
例如,对于更新书价的程序,如果想在更新之后找出最高价格,可将存储过程改成:
CREATE PROCEDURE usp_UpdatePricesMax
       @Type           Char(12),
       @Percent              Money,
       @Max            Money           OUTPUT
AS
BEGIN
       UPDATE Titles
       SET       Price = Price * (1 + @Percent / 100)
       WHERE  Type = @Type

       SELECT @Max = MAX(Price)
       FROM    Titles
END
这只是在执行更新后运行了一个简单的SELECT语句,并将值赋给输出参数。
现在可以改写StroreProcedure.asp的代码从而获取变量@MAX的值。
<%
  Dim cmdUpdate
  Dim lngRecs
  Dim strType
  Dim curPercent
  Dim curMax

  ' Get the form values
  strType = Request.Form("lstTypes")  
  curPercent = Request.Form("txtPercent")

  ' Tell the user what's being done
  Response.Write "Updating all books" & " of type <B>" & strType & "</B>" & _
" by " & curPercent & "%<P>"

  Set cmdUpdate = Server.CreateObject("ADODB.Command")

  ' Set the properties of the command
  With cmdUpdate
    .ActiveConnection = strConn
    .CommandText = "usp_UpdatePricesMax"
    .CommandType = adCmdStoredProc
我们只是在集合中加入了另一个参数,但这次指定为输出参数。注意它并没有赋值,因为其值将由存储过程提供,记住这是一个输出参数。
    ' Add the parameters
    .Parameters.Append .CreateParameter("@Type", adVarWChar, adParamInput, _
12, strType)
    .Parameters.Append .CreateParameter("@Percent", adCurrency, _
adParamInput, , curPercent)
              .Parameters.Append.CreateParameter("@Max", adCurrency, adParamOutput)

   ' Execute the command
    .Execute lngRecs, , adExecuteNoRecords
一旦执行这个过程,就可从集合中取得该值。
       ' Extract the output parameter, which the stored
       ' procedure has supplied to the parameters collection
       curMax = .Parameters("@Max")
  End With


  ' And finally tell the user what's happened
  Response.Write "Procedure complete. " & lngRecs & _
" records were updated.<P>"
         Response.Write "The highest price book is now " & _
                                   FormatCurrency(curMax)

  Set cmdUpdate = Nothing
%>
如果有不止一个输出参数,可用相同的方法访问。可以使用参数名或索引号取出集合中的值。

上一页  [1] [2] 


更多
免责声明:作品版权归所属媒体与作者所有!!本站刊载此文不代表同意其说法或描述,仅为提供更多信息。如果您认为我们侵犯了您的版权,请告知!本站立即删除。有异议请联系我们。
文章录入:烟灰缸    责任编辑:烟灰缸 
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 网站地图 | 版权申明 | 网站公告 | 管理登录 |