当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP教程:不连数据库进行查询分页的思路

ASP
一个ASP版的图片浏览管理器
无组件上传图片至SQLSERVER数据库
利用Jmail.Message发送邮件
用Web页面执行客户端程序
多图片上传到指定的目录并存到数据库
dreamweaverMX通用分页代码研究
下拉菜单输入,根据输入内容自动定位
中文的无组件文件上传ASP函数
一个利用adsi得到局域网信息的asp文件
根据需要动态include不同的文件
让自定义文件下载支持断点续传
用数组实现数据记录的批量录入方法
上传的进度条 实时反映上传情况
用ASP动态生成javascript的表单验证代码
ASP 编程中20个非常有用的例子
ASP生成Word文档的又一方法
用asp解析图片地址,并将其保存。
利用ASP的文件操作实现用户管理
创建 Visual Basic COM 组件在 ASP 中使用
调试 ASP 中使用的 Visual Basic COM 组件

ASP教程:不连数据库进行查询分页的思路


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 93 ::
收藏到网摘: n/a

看了不少介绍,知道set rs=conn.execute(sql)的执行效率比rs.open sql,conn,1,1要高很多,但是set rs=conn.execute(sql)这种执行方式也有很多不足,首先它不具有分页属性,比如rs.pagesize,rs,absolutepage等属性,这样的话,通过这种方式set rs=conn.execute(sql)执行的速度虽然快了,但是却不能按普通方式进行分页,怎么办呢??

  第二天,查了一下网上的资料,突然想到是否可以把所需数据提到一个数组里,然后对数组进行分页呢?首先把set rs=conn.execute(sql)查询出来的结果通过rs.getrows()取出来附给一个数组,于是我就在各网站上找分页的帖子,虽然发现不少高效率分页的帖子(包括存储过程等),可结果发现全都是需要通过SQL执行的,即翻页的时候也需要执行SQL语句,此时头都晕了,优化的也只是SQL语句,此时实在没办法,只好自己努力了!终于完成了一个数组分页的粗稿,代码不是很完善,让大家一起来研究一下!代码如下:
首先有一个index.asp查询页:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body><FORM id="SearchForm" name="SearchForm" method="post" action="search.asp?act=cha">
<div class=input>
<input id=keyword onmouseover=this.focus() title="快速搜索您的留言记录" onfocus=this.select() class="in"  maxlength=35 name=keyword />
<select style="width:120px;margin-top:-25px" name="ChannelID">
<option value="k2">留言人</option>
<option value="k1">留言内容</option>
</select>
  <Input id=search_btn type=submit value="查询">
</div>
</FORM>
</body>
</html>
search.asp的代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%
If request.querystring("act")="cha" Then
search_type=request.FORM("ChannelID")
keywords=request.form("keyword")
if search_type="k1" then '按照留言内容搜索
sql="select * from gbook_rec where g_content like '%"&keywords&"%'"
ElseIf search_type="k2" then
'if search_type="k2" then '按照留言人搜索
sql="select * from gbook_rec where g_name like '%"&keywords&"%'"
Else
response.end
end If
Set rs=conn.execute(sql)
If  rs.eof And rs.bof Then
%>
<div class="search">没有查找到您要的记录!</div>
<%
response.End
Else
aResults=rs.getrows()'取出数据放入数组ROW中
application("data")=aResults
Set rs=nothing
conn.close '关闭数据库
End IF
End If

aResults=application("data")
Dim i,row,pagesize,epage,numb,pagecount,fenye
numb=UBound(aResults,2)+1 '总记录行数
pagesize=2 '每页条数

If numb Mod pagesize = 0 Then '判断总页数
pagecount=Int(numb/pagesize)
Else
pagecount=Int(numb/pagesize)+1
End If

epage=request.querystring("page")

If epage="" Then epage=1    

For i=(epage-1)*pagesize To epage*pagesize-1
If i>UBound(aResults,2) Or i<0 Then Exit for
%>
<div class="content">
<ul><li>记录<%=i+1%></li>
  <li>留言人:<%=aResults(1,i)%></li>
  <li>内容:<%=aResults(2,i)%></li>
  <li>时间:<%=aResults(3,i)%></li>
  <li>IP:<%=aResults(5,i)%></li>
</ul>
</div>
<%
Next
If numb>pagesize Then
fenye="<a href=search.asp?page=1>首页</a>  "
fenye=fenye&"<a href=search.asp?page="&epage-1&" title="&epage-1&">前页</a>  "
fenye=fenye&"<a href=search.asp?page="&epage+1&" title="&epage+1&">后页</a>  "
fenye=fenye&"<a href=search.asp?page="&pagecount&">末页</a>  "
fenye=fenye&"<BR>"
fenye=fenye&"总页数"&pagecount&",当前页"&epage&",总记录为:"&numb
response.write fenye
End if
%>
</body>
</html>

总结:本人认为以上代码除了初次查询需要连接到数据库外,其他时间都不需要连接数据库,对于大型数据查询或连接人数比较多的时候对资源节省还是很有用处理的!另外将查询数组保存在application对象上,还可以根据application( "data")("username")来判断某人查询过什么,不过此代码为初次模型,还有待今后大家一起努力改进!希望大家都顶力关注支持,谢谢!

测试代码下载