ASP程序与SQL存储过程结合使用详解(6)

来源:asp之家 时间:2011-03-25 10:50:00 

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

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

标签:ASP,SQL,存储过程
0
投稿

猜你喜欢

  • 网马解密大讲堂——网马解密初级篇

    2009-09-16 14:45:00
  • python如何重载模块实例解析

    2021-10-13 03:47:56
  • Python3 读取Word文件方式

    2021-03-21 22:36:37
  • Python模拟登录验证码(代码简单)

    2022-09-04 04:41:37
  • css布局查看器

    2008-10-29 11:22:00
  • sqlserver添加sa用户和密码的实现

    2024-01-20 18:42:15
  • Yii2创建多界面主题(Theme)的方法

    2024-04-28 09:44:40
  • PHP中使用BigMap实例

    2024-05-22 10:07:02
  • 配置php网页显示各种语法错误

    2023-11-14 07:23:04
  • Python多进程multiprocessing、进程池用法实例分析

    2022-05-20 00:01:29
  • Oracle 存储过程加密方法

    2009-10-23 18:02:00
  • vue3如何实现挂载并使用axios

    2023-07-02 16:46:06
  • 详解python开发环境搭建

    2023-09-17 21:37:25
  • Python实现排序方法常见的四种

    2022-02-18 08:06:15
  • pytorch DataLoader的num_workers参数与设置大小详解

    2022-12-22 12:15:58
  • Python实现的视频播放器功能完整示例

    2023-05-04 06:33:56
  • Oracle 中文字段进行排序的sql语句

    2009-09-26 18:58:00
  • 对pyqt5中QTabWidget的相关操作详解

    2021-12-15 16:54:54
  • python threading模块的使用指南

    2023-08-10 07:51:59
  • python学习Selenium介绍及安装部署详解

    2021-02-09 21:56:58
  • asp之家 网络编程 m.aspxhome.com