• ASP调用带参数存储过程的几种方式


    1. 这也是最简单的方法,两个输入参数,无返回值:
    set connection = server.createobject("adodb.connection")
    connection.open someDSN
    Connection.Execute "procname varvalue1, varvalue2"

    ''将所有对象清为nothing,释放资源
    connection.close
    set connection = nothing


    2. 如果要返回 Recordset 集:
    set connection = server.createobject("adodb.connection")
    connection.open someDSN
    set rs = server.createobject("adodb.recordset")
    rs.Open "Exec procname varvalue1, varvalue2",connection

    ''将所有对象清为nothing,释放资源
    rs.close
    connection.close
    set rs = nothing
    set connection = nothing


    3. 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
    首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存
    储这些值的变量名称需要在调用参数中先行指定。
    这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)
    存储过程如下:

    use pubs
    GO

    -- 建立存储过程
    create procedure sp_PubsTest

    -- 定义三个参数变量,注意第三个,特别标记是用于输出
    @au_lname varchar (20),
    @intID int,
    @intIDOut int OUTPUT

    AS

    SELECT @intIDOut = @intID + 1

    SELECT *
    FROM authors
    WHERE au_lname LIKE @au_lname + ''%''

    --直接返回一个值
    RETURN @intID + 2


    调用该存储过程的asp程序如下:

    <%@ Language=VBscrīpt %>
    <%
    Dim CmdSP
    Dim adoRS
    Dim adCmdSPStoredProc
    Dim adParamReturnValue
    Dim adParaminput
    Dim adParamOutput
    Dim adInteger
    Dim iVal
    Dim oVal
    Dim adoField
    Dim adVarChar

    ‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBscrīpt 中没有预定义
    adCmdSPStoredProc = 4
    adParamReturnValue = 4
    adParaminput = 1
    adParamOutput = 2
    adInteger = 3
    adVarChar = 200

    iVal = 5
    oVal = 3

    ''建一个command对象
    set CmdSP = Server.CreateObject("ADODB.Command")

    ''建立连结
    CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"

    ''定义command 对象调用名称
    CmdSP.CommandText = "sp_PubsTest"

    ''设置command调用类型是存储过程 (adCmdSPStoredProc = 4)
    CmdSP.CommandType = adCmdSPStoredProc

    ''往command 对象中加参数
    ''定义存储过程有直接返回值,并且是个整数,省缺值是4
    CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
    ''定义一个字符型输入参数
    CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
    ''定义一个整型输入参数
    CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
    ''定义一个整型输出参数
    CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)

    ''运行存储过程,并得到返回记录集
    Set adoRS = CmdSP.Execute


    ''把每个记录打印出来,其中的字段是虚拟的,可以不用管
    While Not adoRS.EOF

    for each adoField in adoRS.Fields
    Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
    Next
    Response.Write "<br>"
    adoRS.MoveNext
    Wend

    ''打印两个输出值:
    Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"
    Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"


    ''大扫除
    Set adoRS = nothing
    Set CmdSP.ActiveConnection = nothing
    Set CmdSP = nothing
    %>


    ------------------------------------------------------------------------------------------------------------------------------------

    在asp中调用sql server的存储过程可以加快程序运行速度

    1.调用存储过程的一般方法
    先假设在sql server中有一存储过程dt_users:
    CREATE PROCEDURE [dbo].[dt_users]
    AS
    select * from users
    return
    GO
    第一种方法是不利用command对象,直接用recordset对象
    set rs=server.createobject("adodb.recordset")
    sql="exec dt_users"
    rs.open sql,conn,1,1 这样就可
    第二种方法是利用command对象
    set comm=server.createobject("adodb.command")
    comm.commantype=4
    set comm.activeconnection=conn
    comm.commandtext="dbo.dt_users"
    set rs=server.createobject("adodb.recordset")
    rs.open comm,,1,1

    2.给存储过程传递参数
    如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!
    比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:
    参数keyword为关键字,choose是选择查询的方法。
    CREATE PROCEDURE [dbo].[dt_bbs]
    @keyword varchar(20)=null,
    @choose int=null
    as
    if @choose=1
    select * from bbs where name like @keyword
    else
    select * from bbs where subject like @keyword
    return
    go
    这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序
    用第一种方法:
    set rs=server.createobject("adodb.recordset")
    sql="exec dt_bbs ''"&keyword&"'',"&choose&""
    rs.open sql,conn,1,1
    用第二种方法:
    set comm=server.createobject("adodb.command")
    comm.commantype=4
    comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
    comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
    set comm.activeconnection=conn
    comm.commandtext="dbo.dt_bbs"
    set rs=server.createobject("adodb.recordset")
    rs.CursorType=3
    rs.open comm,,1,1

  • 相关阅读:
    java之扩展运算符
    error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
    MinGW
    Gcc/MinGW/Cygwin/Msys 分别是什么?
    开源项目:windows下使用MinGW+msys编译ffmpeg
    MinGW安装和使用基础教程
    基于UDP高性能传输协议UDT doc翻译(一)
    基于UDT connect连接通信以及文件传输--客户端
    基于UDT connect连接通信以及文件传输--服务端
    FreeSWITCH第三方库(其他)的简单介绍(三)
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/1994855.html
Copyright © 2020-2023  润新知