1,调用没有参数的存储过程
<%
setconn=server.CreateObject("adodb.connection")
setcmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Openstrconn
setcmd.ActiveConnection=conn
cmd.CommandText="{callnono}"
'setrs=cmc.exe或者cmd.execute
setrs=cmd.Execute()
%>
2,一个输入的参数的存储过程
<%
setconn=server.CreateObject("adodb.connection")
setcmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Openstrconn
setcmd.ActiveConnection=conn
cmd.CommandText="{calloneinput(?)}"
cmd.Parameters.Appendcmd.CreateParameter("@aaa",adInteger,adParamInput)
cmd("@aaa")=100
cmd.Execute()
%>
3,一个输入参数和一个输出的参数
<%
setconn=server.CreateObject("adodb.connection")
setcmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Openstrconn
setcmd.ActiveConnection=conn
cmd.CommandText="{calloneinout(?,?)}"
cmd.Parameters.Appendcmd.CreateParameter("@aaa",adInteger,adParamInput)
cmd("@aaa")=10
cmd.Parameters.Appendcmd.CreateParameter("@bbb",adInteger,adParamOutput)
cmd.Execute()
bbb=cmd("@bbb")
%>
4,一个输入参数,一个输出参数,和一个返回值
<%
setconn=server.CreateObject("adodb.connection")
setcmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Openstrconn
setcmd.ActiveConnection=conn
cmd.CommandText="{?=callonereturn(?,?)}"
cmd.Parameters.Appendcmd.CreateParameter("@return_value",adInteger,adParamReturnValue)
cmd.Parameters.Appendcmd.CreateParameter("@aaa",adInteger,adParamInput)
cmd("@aaa")=10
cmd.Parameters.Appendcmd.CreateParameter("@bbb",adInteger,adParamOutput)
cmd.Execute()
bbb=cmd("@bbb")
rrr=cmd("@return_value")
%>
如何在ASP中调用SQL存储过程
www.lucky365.net2002-2-7吉祥365
<%setconnection1=Server.CreateObject("ADODB.Connection")
connection1.open...'联接
setcommand1=Server.CreateObject("ADODB.command")
setcommand1.activeconnection=connection1
command1.commandtype=4
command1.commandtext="sp_1"'SP名
command1.parameters(1)=...'参数值
command1.parameters(2)=...
setrecordset1=command1.execute()
%>
ASP调用存储过程的技巧
1、最简单的如下
DimobjConn
SetobjConn=Server.CreateObject("ADOBD.Connection")
objConn.OpenApplication("Connection_String")
'Callthestoredproceduretoincrementacounteronthepage
objConn.Execute"execsp_AddHit"
没有参数,没有返回,没有错误处理,就是这个了
2、带参数的一种调用
objConn.Execute"execsp_AddHit'http://www.aspalliance.com"
请注意分割参数,该方法也不返回记录
3、返回记录的
DimobjConn
DimobjRs
SetobjConn=Server.CreateObject("ADOBD.Connection")
SetobjRs=Server.CreateObject("ADOBD.Recordset")
objConn.OpenApplication("Connection_String")
'Callthestoredproceduretoincrementacounteronthepage
objRs.OpenobjConn,"execsp_ListArticles'1/15/2001'"
'Loopthroughrecordsetanddisplayeacharticle
4、……
DimobjConn
DimobjCmd
'Instantiateobjects
SetobjConn=Server.CreateObject("ADODB.Connection")
setobjCmd=Server.CreateObject("ADODB.Command")
conn.OpenApplication("ConnectionString")
WithobjCmd
.ActiveConnection=conn'Youcanalsojustspecifyaconnectionstringhere
.CommandText="sp_InsertArticle"
.CommandType=adCmdStoredProc'Requirestheadovbs.incfileortypelibmetatag
'AddInputParameters
.Parameters.Append.CreateParameter("@columnist_id",adDouble,adParamInput,,columnist_id)
.Parameters.Append.CreateParameter("@url",adVarChar,adParamInput,255,url)
.Parameters.Append.CreateParameter("@title",adVarChar,adParamInput,99,url)
.Parameters.Append.CreateParameter("@description",adLongVarChar,_
adParamInput,2147483647,description)
'AddOutputParameters
.Parameters.Append.CreateParameter("@link_id",adInteger,adParamOutput,,0)
'Executethefunction
'Ifnotreturningarecordset,usetheadExecuteNoRecordsparameteroption
.Execute,,adExecuteNoRecords
link_id=.Parameters("@link_id")
EndWith
5、存储过程的代码
CreatePROCEDUREdbo.sp_InsertArticle
(
@columnist_idint,
@urlvarchar(255),
@titlevarchar(99),
@descriptiontext
@link_idintOUTPUT
)
AS
BEGIN
INSERTINTOdbo.t_link(columnist_id,url,title,description)
VALUES(@columnist_id,@url,@title,@description)
SELECT@link_id=@@IDENTITY
END
ASP调用带参数存储过程的几种方式
作者:中国论坛网收集来源:http://www.51one.net加入时间:2004-8-25
作者:讨饭猫
ASP调用带参数存储过程的几种方式
最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。
1这也是最简单的方法,两个输入参数,无返回值:
setconnection=server.createobject("adodb.connection")
connection.opensomeDSN
Connection.Execute"procnamevarvalue1,varvalue2"
''将所有对象清为nothing,释放资源
connection.close
setconnection=nothing
2如果要返回Recordset集:
setconnection=server.createobject("adodb.connection")
connection.opensomeDSN
setrs=server.createobject("adodb.recordset")
rs.Open"Execprocnamevarvalue1,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对象
setCmdSP=Server.CreateObject("ADODB.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
Response.WriteadoField.Name&"="&adoField.Value&"<br>"&vbCRLF
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中使用存储过程
为了提高Asp程序的效率,有时需要在Asp中使用使用SqlServer的存储技术,下面简单作一个介绍。
存储过程的建立
这里只简单介绍如何在SqlServer的企业管理器中如何建立存储过程:
(1)打开企业管理器Enterprisemanager
(2)选择服务器组(SQLServerGroup)、服务器、数据库(Database)以及相就的数据库,鼠标右击对应数据库下的StoredProcdures项,在弹出的菜单中选择NewStoredProcedure,在StoredProceduresProperties中输入建立存储过程的语句。下面是一个例子:
CREATEPROCEDUREproctest@mycolaChar(10),@mycolbChar(10),@mycolctextAS
Insertintochatdata(mycola,mycolb,mycolc)values(@mycola,@mycolb,@mycolc)
在SqlServer的文档中它的语法为:
CREATEPROC[EDURE]procedure_name[;number][
{@parameterdata_type}[VARYING][=default][OUTPUT]]
[,...n][WITH{RECOMPILE|ENCRYPTION
|RECOMPILE,ENCRYPTION}][FORREPLICATION]AS
sql_statement[...n]
如果你对Sql语法不熟悉,可以使用CheckSyntax来检查语法。在上例中,表示建立存储过程名为mycola,带3个参数的存储过过程,其中第一个参数mycola数据类型为char,宽度10;第2个参数数据类型为char,宽度为10,第3个参数数据类型为text,在这里使用的是SqlServer的数据类型。
存储过程建立后,下面就是如何在Asp程序中调用该存储过程:在Asp中调用存储过程为了提高Asp程序的效率,有时需要在Asp中使用使用SqlServer的存储技术,下面简单作一个,在上面的增加参数的语句p.Appendcm.CreateParameter("@mycolc",201,1,250)中,格式为:
p.Appendcm.CreateParameter("参数名称",类型,方向,大小)
参许参数值的类型的意义如下:
名称值整数值功能
adDBTimeStamp135日期时间数据类型
adDecimal14十进制整数值
adDouble5双精度小数值
adError10系统错误信息
AdGUID72全域性唯一识别字(Globallyuniqueidentifier)
adDispath9COM/OLE自动对象(AutomationObject)
adInteger34字节有符号整数
adIUnknown13COM/OLE对象
adLongVarBinary205大型2字节值
adLongVarChar201大型字符串值
adLongVarWChar203大型未编码字符串
adNumeric131十进制整数值
adSingle4单精度浮点小数
adSmallInt22字节有符号整数
adTinyInt161字节有符号整数
adUnsignedBigInt218字节无符号整数
adUnsignedInt194字节无符号整数
adUnsignedSmallInt182字节无符号整数
adUnsignedTinyInt171字节无符号整数
adUserDefined132用户自定义数据类型
adVariant12OLE对象
adVarBinary204双字节字符变量值
adVarChar200字符变量值
advarchar202未编码字符串变量值
adWchar130未编码字符串
方向值的意义如下:
名称值整数值功能
adParamInput1允许数据输入至该参数当中
adParamOutput2允许数据输出至该参数当中
adParamInputOutput3允许数据输入、输出至该参数当中
adparamReturnValue4允许从一子程序中返回数据至该参数当中
更多详细资源请参考SqlServer的文档和IIS的文档资源。