最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > asp教程

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

日期:01-18    来源:中国设计秀    作者:cnwebshow.com

asp调用带参数存储过程的几种方式hnu中国设计秀

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

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

'将所有对象清为nothing,释放资源hnu中国设计秀
connection.closehnu中国设计秀
set connection = nothinghnu中国设计秀

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

'将所有对象清为nothing,释放资源hnu中国设计秀
rs.closehnu中国设计秀
connection.closehnu中国设计秀
set rs = nothinghnu中国设计秀
set connection = nothinghnu中国设计秀

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

use pubshnu中国设计秀
GOhnu中国设计秀

-- 建立存储过程hnu中国设计秀
create procedure sp_PubsTesthnu中国设计秀

-- 定义三个参数变量,注意第三个,特别标记是用于输出hnu中国设计秀
@au_lname varchar (20), hnu中国设计秀
@intID int,hnu中国设计秀
@intIDOut int OUTPUThnu中国设计秀

AShnu中国设计秀

SELECT @intIDOut = @intID + 1hnu中国设计秀

SELECT * hnu中国设计秀
FROM authors hnu中国设计秀
WHERE au_lname LIKE @au_lname + '%'hnu中国设计秀

--直接返回一个值hnu中国设计秀
RETURN @intID + 2hnu中国设计秀

hnu中国设计秀
调用该存储过程的asp程序如下:hnu中国设计秀

<%@ Language=VBScript %>hnu中国设计秀
<%hnu中国设计秀
Dim CmdSPhnu中国设计秀
Dim adoRShnu中国设计秀
Dim adCmdSPStoredProchnu中国设计秀
Dim adParamReturnValuehnu中国设计秀
Dim adParaminputhnu中国设计秀
Dim adParamOutputhnu中国设计秀
Dim adIntegerhnu中国设计秀
Dim iValhnu中国设计秀
Dim oValhnu中国设计秀
Dim adoFieldhnu中国设计秀
Dim adVarCharhnu中国设计秀

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

iVal = 5hnu中国设计秀
oVal = 3hnu中国设计秀

'建一个command对象hnu中国设计秀
set CmdSP = Server.CreateObject("ADODB.Command")hnu中国设计秀

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

'定义command 对象调用名称 hnu中国设计秀
CmdSP.CommandText = "sp_PubsTest"hnu中国设计秀

'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)hnu中国设计秀
CmdSP.CommandType = adCmdSPStoredProchnu中国设计秀

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

'运行存储过程,并得到返回记录集hnu中国设计秀
Set adoRS = CmdSP.Executehnu中国设计秀

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

for each adoField in adoRS.Fieldshnu中国设计秀
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLFhnu中国设计秀
Nexthnu中国设计秀
Response.Write "<br>"hnu中国设计秀
adoRS.MoveNexthnu中国设计秀
Wendhnu中国设计秀

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

hnu中国设计秀
'大扫除hnu中国设计秀
Set adoRS = nothinghnu中国设计秀
Set CmdSP.ActiveConnection = nothinghnu中国设计秀
Set CmdSP = nothinghnu中国设计秀
%>hnu中国设计秀

hnu中国设计秀
------------------------------------------------------------------------------------------------------------------------------------hnu中国设计秀

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

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

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

本文引用地址:/bc/article_46442.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明