
- 本栏最新文章
- 易被忽视的优化网站设计的五种方法 01-25
- XML常见问题 01-24
- 使用ASP脚本技术 01-21
- 网页中嵌入Flash的方法讨论 01-21
- 删格设计解决网站布局乱的问题 01-21
- Illustrator 3D功能打造一只酒杯 01-20
- ASP.NET编程规范 01-17
- SP调用带参数存储过程的几种方式 01-17
- ASP连接11种数据库语法总结 01-17
- Asp编码优化技巧8则 01-17

- 本栏推荐文章
- Photoshop教程:水灵灵的美女调出来 12-30
- AS3与后台交互 12-21
- AS3通俗教程---AS3自身loading制作 12-19
SP调用带参数存储过程的几种方式
简介:ASP调用带参数存储过程的几种方式最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。1. 这也是最简单的方法,两个输入参数,无返回值:set connection = server.createobj ...
ASP调用带参数存储过程的几种方式<BR>最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。<BR>1. 这也是最简单的方法,两个输入参数,无返回值:<BR>set connection = server.createobject("adodb.connection")<BR>connection.open someDSN<BR>Connection.Execute "procname varvalue1, varvalue2"<BR>'将所有对象清为nothing,释放资源<BR>connection.close<BR>set connection = nothing<BR>2. 如果要返回 Recordset 集:<BR>set connection = server.createobject("adodb.connection")<BR>connection.open someDSN<BR>set rs = server.createobject("adodb.recordset")<BR>rs.Open "Exec procname varvalue1, varvalue2",connection<BR>'将所有对象清为nothing,释放资源<BR>rs.close<BR>connection.close<BR>set rs = nothing<BR>set connection = nothing<BR>3. 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。<BR>首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。<BR>这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)<BR>存储过程如下:<BR>use pubs<BR>GO<BR>-- 建立存储过程<BR>create procedure sp_PubsTest<BR>-- 定义三个参数变量,注意第三个,特别标记是用于输出<BR>@au_lname varchar (20),<BR>@intID int,<BR>@intIDOut int OUTPUT<BR>AS<BR>SELECT @intIDOut = @intID + 1<BR>SELECT *<BR>FROM authors<BR>WHERE au_lname LIKE @au_lname + '%'<BR>--直接返回一个值<BR>RETURN @intID + 2<BR>调用该存储过程的asp程序如下:<BR><%@ Language=VBScript %><BR><%<BR>Dim CmdSP<BR>Dim adoRS<BR>Dim adCmdSPStoredProc<BR>Dim adParamReturnValue<BR>Dim adParaminput<BR>Dim adParamOutput<BR>Dim adInteger<BR>Dim iVal<BR>Dim oVal<BR>Dim adoField<BR>Dim adVarChar<BR>‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBScript 中没有预定义<BR>adCmdSPStoredProc = 4<BR>adParamReturnValue = 4<BR>adParaminput = 1<BR>adParamOutput = 2<BR>adInteger = 3<BR>adVarChar = 200
iVal = 5<BR>oVal = 3</P>
'建一个command对象<BR>set CmdSP = Server.CreateObject("ADODB.Command")<BR>'建立连结<BR>CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"<BR>'定义command 对象调用名称<BR>CmdSP.CommandText = "sp_PubsTest"<BR>'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)<BR>CmdSP.CommandType = adCmdSPStoredProc<BR>'往command 对象中加参数<BR>'定义存储过程有直接返回值,并且是个整数,省缺值是4<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)<BR>'定义一个字符型输入参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")<BR>'定义一个整型输入参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)<BR>'定义一个整型输出参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)<BR>'运行存储过程,并得到返回记录集<BR>Set adoRS = CmdSP.Execute<BR>'把每个记录打印出来,其中的字段是虚拟的,可以不用管<BR>While Not adoRS.EOF<BR>for each adoField in adoRS.Fields<BR>Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF<BR>Next<BR>Response.Write "<br>"<BR>adoRS.MoveNext<BR>Wend<BR>'打印两个输出值:<BR>Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"<BR>Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"<BR>'大扫除<BR>Set adoRS = nothing<BR>Set CmdSP.ActiveConnection = nothing<BR>Set CmdSP = nothing<BR>%><BR>------------------------------------------------------------------------------------------------------------------------------------<BR>在asp中调用sql server的存储过程可以加快程序运行速度<BR>1.调用存储过程的一般方法<BR>先假设在sql server中有一存储过程dt_users:<BR>CREATE PROCEDURE [dbo].[dt_users]<BR>AS<BR>select * from users<BR>return<BR>GO<BR>第一种方法是不利用command对象,直接用recordset对象<BR>set rs=server.createobject("adodb.recordset")<BR>sql="exec dt_users"<BR>rs.open sql,conn,1,1 这样就可<BR>第二种方法是利用command对象<BR>set comm=server.createobject("adodb.command")<BR>comm.commantype=4<BR>set comm.activeconnection=conn<BR>comm.commandtext="dbo.dt_users"<BR>set rs=server.createobject("adodb.recordset")<BR>rs.open comm,,1,1<BR>2.给存储过程传递参数<BR>如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!<BR>比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:<BR>参数keyword为关键字,choose是选择查询的方法。<BR>CREATE PROCEDURE [dbo].[dt_bbs]<BR>@keyword varchar(20)=null,<BR>@choose int=null<BR>as<BR>if @choose=1<BR>select * from bbs where name like @keyword<BR>else<BR>select * from bbs where subject like @keyword<BR>return<BR>go<BR>这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序<BR>用第一种方法:<BR>set rs=server.createobject("adodb.recordset")<BR>sql="exec dt_bbs '"&keyword&"',"&choose&""<BR>rs.open sql,conn,1,1<BR>用第二种方法:<BR>set comm=server.createobject("adodb.command")<BR>comm.commantype=4<BR>comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)<BR>comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)<BR>set comm.activeconnection=conn<BR>comm.commandtext="dbo.dt_bbs"<BR>set rs=server.createobject("adodb.recordset")<BR>rs.CursorType=3<BR>rs.open comm,,1,1</P>
iVal = 5<BR>oVal = 3</P>
'建一个command对象<BR>set CmdSP = Server.CreateObject("ADODB.Command")<BR>'建立连结<BR>CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"<BR>'定义command 对象调用名称<BR>CmdSP.CommandText = "sp_PubsTest"<BR>'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)<BR>CmdSP.CommandType = adCmdSPStoredProc<BR>'往command 对象中加参数<BR>'定义存储过程有直接返回值,并且是个整数,省缺值是4<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)<BR>'定义一个字符型输入参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")<BR>'定义一个整型输入参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)<BR>'定义一个整型输出参数<BR>CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)<BR>'运行存储过程,并得到返回记录集<BR>Set adoRS = CmdSP.Execute<BR>'把每个记录打印出来,其中的字段是虚拟的,可以不用管<BR>While Not adoRS.EOF<BR>for each adoField in adoRS.Fields<BR>Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF<BR>Next<BR>Response.Write "<br>"<BR>adoRS.MoveNext<BR>Wend<BR>'打印两个输出值:<BR>Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"<BR>Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"<BR>'大扫除<BR>Set adoRS = nothing<BR>Set CmdSP.ActiveConnection = nothing<BR>Set CmdSP = nothing<BR>%><BR>------------------------------------------------------------------------------------------------------------------------------------<BR>在asp中调用sql server的存储过程可以加快程序运行速度<BR>1.调用存储过程的一般方法<BR>先假设在sql server中有一存储过程dt_users:<BR>CREATE PROCEDURE [dbo].[dt_users]<BR>AS<BR>select * from users<BR>return<BR>GO<BR>第一种方法是不利用command对象,直接用recordset对象<BR>set rs=server.createobject("adodb.recordset")<BR>sql="exec dt_users"<BR>rs.open sql,conn,1,1 这样就可<BR>第二种方法是利用command对象<BR>set comm=server.createobject("adodb.command")<BR>comm.commantype=4<BR>set comm.activeconnection=conn<BR>comm.commandtext="dbo.dt_users"<BR>set rs=server.createobject("adodb.recordset")<BR>rs.open comm,,1,1<BR>2.给存储过程传递参数<BR>如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!<BR>比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:<BR>参数keyword为关键字,choose是选择查询的方法。<BR>CREATE PROCEDURE [dbo].[dt_bbs]<BR>@keyword varchar(20)=null,<BR>@choose int=null<BR>as<BR>if @choose=1<BR>select * from bbs where name like @keyword<BR>else<BR>select * from bbs where subject like @keyword<BR>return<BR>go<BR>这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序<BR>用第一种方法:<BR>set rs=server.createobject("adodb.recordset")<BR>sql="exec dt_bbs '"&keyword&"',"&choose&""<BR>rs.open sql,conn,1,1<BR>用第二种方法:<BR>set comm=server.createobject("adodb.command")<BR>comm.commantype=4<BR>comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)<BR>comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)<BR>set comm.activeconnection=conn<BR>comm.commandtext="dbo.dt_bbs"<BR>set rs=server.createobject("adodb.recordset")<BR>rs.CursorType=3<BR>rs.open comm,,1,1</P>


