存储过程及ASP调用存储过程实现分页(四)
3、有返回输出参数和记录集的存储过程
经过前面2点的讲解相信你现在对存储过程又有进一步的理解了。这里我就拿我们最常使用的存储过程分页来说这个有返回输出参数和记录集的存储过程。
首先打开SQL 查询分析器,(下面的注解我就没有每条都写了,不清楚可以选中它然后按:Shift+F1或直接按F1 然后再索引里输入你要查询的关键字。)
①存储过程代码:输入:
Use Johnny
Go
/*=======第3个存储过程====
有返回输出参数和记录集的存储过程
有任何问题:QQ:40623660
========================*/
CREATE PROC testPROC3
@tPageCount int OUTPUT, --输出参数,总页数
@tPageSize int, --每页显示多少条记录
@tPageNo int --当前页码
AS
SET NOCOUNT ON
BEGIN
/*取得总记录条数*/
DECLARE @tRecordCount int --总记录条数
SELECT @tRecordCount=COUNT(tID) FROM testTable
/*确定总的页数*/
IF (@tRecordCount % @tPageSize) = 0
SET @tPageCount=CEILING(@tRecordCount/@tPageSize) --CEILING函数:返回大于或等于所给数字表达式的最小整数。
ELSE
SET @tPageCount=CEILING(@tRecordCount/@tPageSize)+1
/*如果输入的页码大于总的页数*/
IF @tPageNo > @tPageCount
SET @tPageNo = @tPageCount
/*确定当前页记录的起止标记*/
DECLARE @tStart int , @tEnd int --设置起止标志
SET @tStart=(@tPageNo-1) * @tPageSize
SET @tEnd =@tStart+@tPageSize+1
/*由其止标记得到当前页的记录*/
SELECT * FROM testTable WHERE (tID>@tStart) AND (tID<@tEnd)
/*我们把总记录做为返回值,这样存储过程就变了有返回值,输出参数和记录集了*/
RETURN @tRecordCount --做为返回值
END
选中运行下。
②ASP代码:然后我们就打开Dreamweaver 在你的测试文件夹下新建test3.asp然后输入我们的数据库连接字符串(存储过程1调用的红色部分),再输入下面代码:
url="?" '或:文件名.asp?
StartTime = Timer
dim cmd,PageNo,tPageCount,tPageSize,tRecordCount
PageNo=Cint(Trim(request("PageNo"))) '输入参数
if PageNo="" or PageNo<=0 then PageNo=1
tPageSize=10
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = connstr
cmd.CommandText = "dbo.testPROC3"
cmd.CommandType = 4
cmd.CommandTimeout = 0
cmd.Prepared = true
cmd.Parameters.Append cmd.CreateParameter("@tRecordCount", 3, 4)
cmd.Parameters.Append cmd.CreateParameter("@tPageCount", 3, 2)
cmd.Parameters.Append cmd.CreateParameter("@tPageSize", 3, 1,10,tPageSize)
cmd.Parameters.Append cmd.CreateParameter("@PageNo", 3, 1,10,PageNo)
set rs=cmd.Execute()
rs.close() '注意:若要取得参数值,需先关闭记录集对象,要使用的时候再打开
'返回值
tRecordCount=cmd(0)
'输出参数
tPageCount=cmd(1) '或tPageCount =cmd("@tPageCount ")或tPageCount =cmd.Parameters(1) 其参数顺序时从0开始。
IF PageNo>=tPageCount THEN PageNo=tPageCount
set cmd=nothing
'显示记录
IF tRecordCount=0 THEN
response.Write("没有记录!")
response.End()
else
rs.open()
while not rs.eof
response.Write("<li>"&rs("tID")&"|"&rs("tUserName")&"|"&rs("tTel")&"</li><hr />"&VbCrlf)
rs.movenext
wend
'========下面是分页======
if PageNo<=1 then
Response.Write "<font color='#FF0000'>[首页] [上一页]</font>"
else
Response.Write"[<a href='"&url&"PageNo=1' target='_self' title='首页'><font color='#FF0000'>首页</font></a>] "
Response.Write" [<a href='"&url&"PageNo="&(PageNo-1)&"' target='_self' title='上一页 '><font color='#FF0000'>上一页</font></a>] "
end if
if PageNo>=tPageCount then
Response.Write "<font color='#FF0000'>[下一页] [尾页]</font>"
else
Response.Write" [<a href='"&url&"PageNo="&(PageNo+1)&"' target='_self' title='下一页 '><font color='#FF0000'>下一页</font></a>] "
Response.Write" [<a href='"&url&"PageNo="&tPageCount&"' target='_self' title='尾页 '><font color='#FF0000'>尾页</font></a>]"
end if
Response.Write("[页次 第<font color=red>"&PageNo&"</font>页/共<font color=red>" & tPageCount &"</font>页]")
Response.Write("[共<font color=red >"&tRecordCount&"</font>条 <font color=red>"& tPageSize & "</font>条/页]")
Response.Write(" 转到" & "<input id=goto name=goto size=""6"" maxsize=""10"" value="& PageNo&" onKeyDown=""if(event.keyCode==13) {window.location.href='"&url&"pageNo='+this.value; return false;}"" onkeyup=""value=value.replace(/[^\d]/g,'') "" onbeforepaste=""clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"" />" & "页<input type=submit value=""Go"" onclick= ""gotoPage()"" />")
Response.Write("</td></tr></table>")
Response.Write("<script>function gotoPage(){var pg=document.getElementById('goto'). value;if(isNaN(pg)||pg>"&tPageCount&"||pg<0){window.alert('请正确输入页码,只能为正整数!且不能大于"&tPageCount&"');return false;}else {window.location.href='"&url&"PageNo='+document.getElementById('goto').value+'';return true;}}</script>")
rs.close()
EndTime = Timer
response.Write(" 所用时间:【"&FormatNumber((EndTime - StartTime),5,true)&"秒】<br />")
end if
这个页面的代码有点多,直接COPY下,保存下。
按下F12 看看效果吧:
注意:在这种有参数和记录集的情况下,若要取得参数值,需先关闭记录集对象,要使用的时候再打开。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |