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

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


来源:不详 时间:07-05-26 点击: 点击这里收藏本文
'**调用同时具有返回值、输入参数、输出参数的存储过程**

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("RETURN",2,4)

'以下两参数的声明顺序也做相应颠倒

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

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

.Execute

end with

if MyComm(0) = 1 then

UserName = MyComm(1)

else

UserName = "该用户不存在"

end if

Set MyComm = Nothing

  6. 同时返回参数和记录集的存储过程

  有时候,我们需要存储过程同时返回参数和记录集,比如在利用存储过程分页时,要同时返回记录集以及数据总量等参数。以下给出一个进行分页处理的存储过程:

/*SP6*/

CREATE PROCEDURE dbo.getUserList

@iPageCount int OUTPUT, --总页数

@iPage int, --当前页号

@iPageSize int --每页记录数

as

set nocount on

begin

--创建临时表

create table #t (ID int IDENTITY, --自增字段

userid int,

username varchar(40))

--向临时表中写入数据

insert into #t

select userid,username from dbo.[UserInfo]

order by userid

--取得记录总数

declare @iRecordCount int

set @iRecordCount = rowcount

--确定总页数

IF @iRecordCount%@iPageSize=0

SET @iPageCount=CEILING(@iRecordCount/@iPageSize)

ELSE

SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1

--若请求的页号大于总页数,则显示最后一页

IF @iPage > @iPageCount

SELECT @iPage = @iPageCount

--确定当前页的始末记录

DECLARE @iStart int --start record

DECLARE @iEnd int --end record

SELECT @iStart = (@iPage - 1) * @iPageSize

SELECT @iEnd = @iStart + @iPageSize + 1

--取当前页记录

select * from #t where ID> @iStart and ID <@iEnd

--删除临时表

DROP TABLE #t

--返回记录总数

return @iRecordCount

end

go

  在上面的存储过程中,输入当前页号及每页记录数,返回当前页的记录集,总页数及记录总数。为了更具典型性,将记录总数以返回值的形式返回。以下是调用该存储过程的ASP代码(具体的分页操作略去):

'**调用分页存储过程**

DIM pagenow,pagesize,pagecount,recordcount

DIM MyComm,MyRst

pagenow = Request("pn")

'自定义函数用于验证自然数

if CheckNar(pagenow) = false then pagenow = 1

pagesize = 20

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

with MyComm

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

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

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

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

'返回值(记录总量)

.Parameters.Append .CreateParameter("RETURN",2,4)

'出参(总页数)

.Parameters.Append .CreateParameter("@iPageCount",3,2)

'入参(当前页号)

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

'入参(每页记录数)

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

Set MyRst = .Execute

end with

if MyRst.state = 0 then '未取到数据,MyRst关闭

recordcount = -1

else

MyRst.close '注意:若要取得参数值,需先关闭记录集对象

recordcount = MyComm(0)

pagecount = MyComm(1)

if cint(pagenow)> =cint(pagecount) then pagenow=pagecount

end if

Set MyComm = Nothing

'以下显示记录

if recordcount = 0 then

Response.Write "无记录"

elseif recordcount > 0 then

MyRst.open

do until MyRst.EOF

......

loop

'以下显示分页信息

......

else 'recordcount=-1

Response.Write "参数错误"

end if

  对于以上代码,只有一点需要说明:同时返回记录集和参数时,若要取得参数,需先将记录集关闭,使用记录集时再将其打开。

9 7 3 1 2 3 4 5 4 8 :

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

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