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

2018-09-06 11:11

阅读:552

  ASP调用带参数存储过程的几种方式选择自hxfwsk的Blog
关键字存储过程
出处

作者:讨饭猫

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

最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。

1这也是最简单的方法,两个输入参数,无返回值:
connection.opensomeDSN
Connection.Executeprocnamevarvalue1,varvalue2

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


2如果要返回Recordset集:
setconnection=server.createobject(adodb.connection)
connection.opensomeDSN
setrs=server.createobject(adodb.recordset)
rs.OpenExecprocnamevarvalue1,varvalue2,connection

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


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

usepubs
GO

--建立存储过程
createproceduresp_PubsTest

--定义三个参数变量,注意第三个,特别标记是用于输出
@au_lnamevarchar(20),
@intIDint,
@intIDOutintOUTPUT

AS

SELECT@intIDOut=@intID+1

SELECT*
FROMauthors
WHEREau_lnameLIKE@au_lname+%

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


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

<%@Language=VBScript%>
<%
DimCmdSP
DimadoRS
DimadCmdSPStoredProc
DimadParamReturnValue
DimadParaminput
DimadParamOutput
DimadInteger
DimiVal
DimoVal
DimadoField
DimadVarChar

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

iVal=5
oVal=3

建一个command对象

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

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

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

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

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


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

foreachadoFieldinadoRS.Fields
Next
Response.Write<br>
adoRS.MoveNext
Wend

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


大扫除
SetadoRS=nothing
SetCmdSP.ActiveConnection=nothing
SetCmdSP=nothing
%>


asp调用数据库存储过程选择自11830的Blog
关键字asp,数据库,存储过程
出处

asp调用数据库存储过程

<%SetDataconn=Server.CreateObject(ADODB.Connection)
建立连接对象
Dataconn.OpenDSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;APP=Microsoft(R)DeveloperStudio;WSID=APP_SERVER;Regional=Yes
SetcmdTemp=Server.CreateObject(ADODB.Command)
建立命令对象
Setrst=Server.CreateObject(ADODB.Recordset)
建立记录集对象
cmdTemp.CommandText=dbo.pd_test存储过程名称
cmdTemp.CommandType=4
命令类别为4,表示为存储过程
SetcmdTemp.ActiveConnection=Dataconn
SettmpParam=cmdTemp.CreateParameter(ReturnValue,3,4,4)
cmdTemp.Parameters.AppendtmpParam
SettmpParam=cmdTemp.CreateParameter(@BeginDate,135,1,16,riqi)
创建输入参数对象
cmdTemp.Parameters.AppendtmpParam
rst.OpencmdTemp,,1,3
生成查询结果
%>
这里调用的存储过程为pd_test,这种是ADO中提供的标准方法,但存在一个问题,就是当在存储过程中有两个以上的SELECT语句,但从逻辑上又不可能同时执行的时候,ADO会提示你存储过程中SELECT语句太多,解决方法是直接用ADO的CONNECTION对象的EXECUTE方法直接执行存储过程,如下:
<%
SetDataconn=Server.CreateObject(ADODB.Connection)
建立连接对象
Dataconn.OpenDSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;APP=Microsoft(R)DeveloperStudio;WSID=APP_SERVER;Regional=Yes
ss=EXECUTEdbo.pd_test&&riqi1&
Setrs=dataconn.Execute(ss)
%>






评论


亲,登录后才可以留言!