asp + oracle 分页方法 (不用存储过程)

Advertisement

asp 中查询 oracle数据库 的分页程序,没有用存储过程,效率还可以。

代码如下:

'''' 塞北的雪 分页利器(oracle) 不用存储过程 -------------------------

'其中注释中有 ###的需要用户设置
'其中注释中有 参数传递 ** 的 说明要通过参数 传递。

'定义变量
dim tOption '查询条件
dim tOrder '排序字符串
dim tOrderField '排序字段 可通过参数获得:order_field
dim tOrderDirection '排序方向 可通过参数获得:order_direction

dim tPageSize '页大小
dim tTotalCount '总记录数 可通过参数获得:t_count
dim tPageCount '页数
dim tCurPage '当前页号 可通过参数获得:page

dim tTableName '表或者视图名

dim tFieldList '查询的字段列表
dim tPageField '用于分页的字段

dim r_count '查得的记录数

set rs=server.createobject("adodb.recordset") '记录集对象

'排序处理
tOrderField=Request("order_field") '获得排序字段(参数传递 **)
tOrderDirection=Request("order_dir") '获得排序方向(参数传递 **)

if(tOrderField="") then tOrderField="item_code" ' ### 设置默认排序字段
if(tOrderDirection="") then tOrderDirection="asc" ' ### 设置默认排序方向

tOrder=" order by " & tOrderField & " " & tOrderDirection & " " '生成排序字符串

'定义参数
tPageSize=find_rs_count ' ### 设置页大小
tTableName="view_select1" ' ### 设置与查询的表格或视图
tFieldList=" * " ' ### 欲查询的字段列表
tPageField="item_code" ' ### 设置一个主键或唯一索引的字段 ,用于分页计算

'页数处理
tCurPage=Request("page") '获得当前页(参数传递 **)
tTotalCount=Request("t_count") '获得总页数(参数传递 **)

if(tCurPage="") then tCurPage=1
if(cint(tCurPage)=0) then tCurPage=1
if(tPageCount="") then tPageCount =1
if(cint(tPageCount)=0) then tPageCount=1

' 构造查询条件,根据具体的程序,肯定不一样。但是最后的条件必须是“ where ??? ”
tOption=" issue_flag='Y'" ' ### 设置条件
if f_c<>"" then tOPtion= tOPtion & f_c ' ### 设置条件

if trim(tOption)="" then
tOption = " where 1=1 " '如果没有条件,就自己加一个。
else
tOption= " where " & tOPtion
end if

'构造查询字符串,这个分页程序的核心,此查询串是我们只下载当前页所需的记录

sss="select * from (select rownum r_n,temptable.* from (select " & tFieldList & " from " & tTableName & " " & tOption & " " & tOrder & ") temptable ) where r_n between " & cstr((tCurPage -1) * tPageSize +1) & " and " & cstr(tCurPage * tPageSize)

'执行主查询,获得相应记录集
Call ConnDataBase() ' ### 建立数据库连接
rs.cursorlocation=3
rs.open conStr,conn,3,1 '执行查询
r_count= rs.recordcount

'当还没有查询过总记录数时 并且 总的记录数超过了页大小时 ,查询当前条件下的总的记录数
if(r_count>=tPageSize or tCurPage>1) and tTotalCount=0 then
set rr=conn.execute("select count(*) from " & tTableName & " " & tOption)
tTotalCount=rr(0)
rr.close()
set rr=nothing
end if
if(cint(tTotalCount)=0) then tTotalCount=r_count '如果总记录为0,将当前差得的记录集的记录数设置为总记录数,说明当前的总记录数小于页大小

'利用页大小和总记录数 计算页数
if(cint(tTotalCount)>cint(tPageSize)) then
tPageCount=cint((cint(tTotalCount) / cint(tPageSize)))
if(cint(tTotalCount) mod cint(tPageSize))>0 then
tPageCount =tPageCount +1
end if
end if

tCurPage=cint(tCurPage)
tPageCount=cint(tPageCount)

' ---------------------------------------------------------------------

这就是全部代码,感兴趣的朋友,可以研究一下,或者将他封装起来,加上分页导航等方法。总之,希望此代码能对大家有用。

Similar Posts:

  • ASP.NET分页方法的了解程度

    ASP.NET分页方法的了解程度[出现频率]★★★★☆[解答]ASP.NET分页的常用方法有以下几种.q 启用部分数据控件的内置分页功能,如设置GridView控件的"AllowPaging"属性为"true",类似的数据控件还有DetailsView等.q 通过SQL查询语句,以提取指定部分的数据的方式完成分页的功能.也包括调用数据库中内置的存储过程完成分页数据的提取.q 调用所对应数据适配器对象(DataAdapter对象)的Fill方法时,传递分页参数以完成数

  • Asp.Net分页方法:JQuery插件实现Ajax无刷新分页、AspNetPager分页控件实现分页

    一.使用JQuery插件pagination实现AJax无刷新分页: 以下只列出主要代码及注释,详细请参考最后源码: 我们需要用到的文件有:jquery.js,jquery.pagination.js,pagination.css 以及用于将DataTable转换为Json的插件Newtonsoft.Json.Net20.dll,文件在包含在最下面的源文件中 分页存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- =========

  • ASP通用分页方法

    可以把分页做成一个Sub,以后再写分页的时候就简单喽,Call一下就OK 首选呢,打开表,这个我不说了,现在我们得到一个记录指针rs 我们需要对分页大小等参数进行相关设置如下: <% '//页面大小等参数设置 rs.PageSize =18 '每页记录条数 iCount=rs.RecordCount '记录总数 iPageSize=rs.PageSize maxpage=rs.PageCount page=request("page") if Not IsNumeric(page

  • ASP.NET调用Oracle分页存储过程并结合ASPnetpager分页控件 实现分页功能

    之前用的是GridView自带的分页功能,那速度啊慢的真实不行 ,决定自定义分页 Oracle库里有5W多条数据 AspnetPager做的还是不错,拿过来用 Oracle 分页存储过程: create or replace package JT_P_page is type type_cur is ref cursor; --定义游标变量用于返回记录集 procedure Pagination (Pindex in number, --要显示的页数索引,从0开始 Psql in varchar

  • [转]ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

    摘要:在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页方法. ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分

  • Oracle排序分页方法

    ORACLE分页一直是比较麻烦的一件事情,它没有MYSQL的LIMIT关键字,只有通过伪列ROWNUM来实现,如果不用排分页其实很简单,在此不述. 排序分页中如果要排序的字段有很多相同值的情况下只使用2层嵌套查询则可能出现数据混乱,所以只能采用三层嵌套查询. 排序分页使用下面的嵌套语句: Sql代码 Java代码 select * from (select rownum as r,t.* from(select tableName.* from tableName order by tableC

  • (转)C#中调用ORACLE的PACKAGE里方法和存储过程的应用

    转自http://www.cnblogs.com/aosiyelong/archive/2011/07/13/2105444.html 下面列举如何在C#中调用ORACLE的PACKAGE的东西,主要包括PACKAGE的方法和存储过程 一,首先在ORACLE里建立如下PACKAGE PACKAGE分SPEC和body两部分. 1.SPEC是声明部分. CREATE OR REPLACE PACKAGE FirstPage is type outlist is ref cursor; Proced

  • 第二个asp.net分页代码(用gridview控件分页,数据不用sqldatasource)

    我的第二个asp.net分页,用gridview控件分页,实现简单,并且gridview的数据源是用sqldatasource链接的 前台代码: <asp:GridView ID="grd" runat="server" AllowPaging="true" PageSize="6" AutoGenerateColumns="False" DataKeyNames="id" Wid

  • 数据库分页方法

    方法一: select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 10 = 每页记录数 20 = (当前页 + 1) * 每页记录数 以上语句即可以实现分页,但是最后取出的结果排序是升序,如果需要结果集为降序(例如时间),则有两种方法可以处理 1.使用以下语句,但效率可能要降低一些 select * from 表

  • ASP通用分页类

    http://wediy.cn/develop/Asp/2006-4-9/k5262.html ASP通用分页类 一.类的属性.方法 这是一个ASP通用分页类.你可以用它方便的给记录集分页,当然在网上有许多的分页类和分页函数.本分页主要有Conn.SQL.URL.FieldList.PageSize.Template.Init.Show.Close等属性和方法. 1.Conn属性 :用来获取一个已创建的Connection对象. 2.SQL属性 :根据传入的SQL语句,自动创建RecordSet

Tags: