精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>ASP教程>正文

技巧:ASP开发中存储过程应用全接触


来源:不详 时间:07-05-26 点击: 点击这里收藏本文
  调用该存储过程的ASP代码如下:

'**调用带有输入输出参数的存储过程**

DIM MyComm,UserID,UserName

UserID = 1

Set MyComm = Server.CreateObject("ADODB.Command")

MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串

MyComm.CommandText = "getUserName" '指定存储过程名

MyComm.CommandType = 4 '表明这是一个存储过程

MyComm.Prepared = true '要求将SQL命令先行编译

'声明参数

MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)

MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)

MyComm.Execute

'取得出参

UserName = MyComm(1)

Set MyComm = Nothing

  在以上代码中,可以看到,与声明返回值不同,声明输入参数时需要5个参数,声明输出参数时需要4个参数。声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值。声明输出参数时,没有最后一个参数:参数值。

  需要特别注意的是:在声明参数时,顺序一定要与存储过程中定义的顺序相同,而且各参数的数据类型、长度也要与存储过程中定义的相同。

  如果存储过程有多个参数,ASP代码会显得繁琐,可以使用with命令简化代码:

'**调用带有输入输出参数的存储过程(简化代码)**

DIM MyComm,UserID,UserName

UserID = 1

Set MyComm = Server.CreateObject("ADODB.Command")

with MyComm

 .ActiveConnection = MyConStr 'MyConStr是数据库连接字串

 .CommandText = "getUserName" '指定存储过程名

 .CommandType = 4 '表明这是一个存储过程

 .Prepared = true '要求将SQL命令先行编译

 .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)

 .Parameters.append .CreateParameter("@UserName",200,2,40)

 .Execute

end with

UserName = MyComm(1)

Set MyComm = Nothing

  假如我们要取得ID为1到10,10位用户的用户名,是不是要创建10次Command对象呢?不是的。如果需要多次调用同一存储过程,只需改变输入参数,就会得到不同的输出:

'**多次调用同一存储过程**

DIM MyComm,UserID,UserName

UserName = ""

Set MyComm = Server.CreateObject("ADODB.Command")

for UserID = 1 to 10

 with MyComm

  .ActiveConnection = MyConStr 'MyConStr是数据库连接字串

  .CommandText = "getUserName" '指定存储过程名

  .CommandType = 4 '表明这是一个存储过程

  .Prepared = true '要求将SQL命令先行编译

  if UserID = 1 then

   .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)

   .Parameters.append .CreateParameter("@UserName",200,2,40)

   .Execute

  else

   '重新给入参赋值(此时参数值不发生变化的入参以及出参不必重新声明)

  .Parameters("@UserID") = UserID

   .Execute

  end if

 end with

 UserName = UserName + MyComm(1) + "," '也许你喜欢用数组存储

next

Set MyComm = Nothing

  通过以上代码可以看出:重复调用同一存储过程时,只需为值发生改变的输入参数重新赋值即可,这一方法在有多个输入输出参数,且每次调用时只有一个输入参数的值发生变化时,可以大大减少代码量。

5. 同时具有返回值、输入参数、输出参数的存储过程

  前面说过,在调用存储过程时,声明参数的顺序要与存储过程中定义的顺序相同。还有一点要特别注意:如果存储过程同时具有返回值以及输入、输出参数,返回值要最先声明。

  为了演示这种情况下的调用方法,我们改善一下上面的例子。还是取得ID为1的用户的用户名,但是有可能该用户不存在(该用户已删除,而userid是自增长的字段)。存储过程根据用户存在与否,返回不同的值。此时,存储过程和ASP代码如下:

/*SP5*/

CREATE PROCEDURE dbo.getUserName

--为了加深对"顺序"的印象,将以下两参数的定义顺序颠倒一下

@UserName varchar(40) output,

@UserID int

as

set nocount on

begin

if @UserID is null return

select @UserName=username

from dbo.[userinfo]

where userid=@UserID

if rowcount> 0

return 1

else

return 0

return

end

go

9 7 3 1 2 3 4 5 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.