首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

哪位高手有好点的分页代码可以调用的或给点分页程序的建议

2012-02-29 
谁有好点的分页代码可以调用的或给点分页程序的建议以前是access数据库,大概2万条数据,我都是这样分页的:.

谁有好点的分页代码可以调用的或给点分页程序的建议
以前是access数据库,大概2万条数据,我都是这样分页的:
...
rs.Open   sql,conn,1,1
iCount=rs.recordcount
n=0
    If   Not   isempty(request( "page "))   Then      
        pagecount=cint(request( "page "))
    Else
        pagecount=1
    End   If
    rs.pagesize=30
    rs.AbsolutePage=pagecount
    do   while   not   rs.eof
...
现在换成了mssql数据库感觉比用access还慢啊??以后估计还会更多,几十万条数据那不拖得不行了,记得以前有人写过效率比较不错的asp分页代码的,然后直接可以用的,大家给想想办法,分页怎么处理比较好,谢谢啦!!!!

[解决办法]
用存储过程分页
你baidu下
[解决办法]
1.应该不会比access慢,sql语句设计是不是考虑了索引等因素。
2.稍大点的数据量可以用存储过程分页,每次只取n条。
3.几十万的数据分页似乎已经不太适合了,每页20条要n万页。还是要从业务角度减少数据量。

分页存储过程参考:
CREATE PROCEDURE sp_paging
(
@strTblNameVARCHAR(100),--表名或视图表
@strFieldsVARCHAR(4000)= '* ',--欲选择字段列表
@strOrdFieldVARCHAR(100),--排序字段
@strKeyFieldVARCHAR(100),--主键
@intPageNoINT= 0,--页号,从0开始
@intPageSizeINT= 10,--页尺寸
@strWhereVARCHAR(4000)= ' ',--条件
@bitOrdTypeBIT= 1--排序,1=降序,0=升序
)
AS
SET NOCOUNT ON
DECLARE @strSQL VARCHAR(6000)

IF @intPageNo = 0
BEGIN
SET @strSQL= 'SELECT TOP ' + CAST(@intPageSize AS VARCHAR) + ' ' + @strFields + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
IF @bitOrdType = 1
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC '
ELSE
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC '
END
ELSE
BEGIN
SET @strSQL= 'DECLARE @intCurPageNo int; '
SET @strSQL= @strSQL + 'DECLARE @intNextPageNo int; '
SET @strSQL= @strSQL + 'SET @intCurPageNo = ' + CAST(@intPageNo AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL= @strSQL + 'SET @intNextPageNo = ' + CAST(@intPageNo+1 AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL= @strSQL + 'DECLARE @strSQL VARCHAR(6000); '
IF @bitOrdType = 1
BEGIN
SET @strSQL= @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) AS atmp WHERE ' + @strKeyField
+ ' NOT IN (SELECT TOP ' ' + CAST(@intCurPageNo AS VARCHAR) + ' ' ' + @strKeyField + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) ORDER BY ' + @strOrdField + ' DESC ' '; '
END
ELSE
BEGIN
SET @strSQL= @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC ) AS atmp WHERE ' + @strKeyField
+ ' NOT IN (SELECT TOP ' ' + CAST(@intCurPageNo AS VARCHAR) + ' ' ' + @strKeyField + ' FROM ' + @strTblName


IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC) ORDER BY ' + @strOrdField + ' ASC ' '; '
END
SET @strSQL=@strSQL + 'EXECUTE(@strSQL); '
END
print @strSQL
EXECUTE(@strSQL)

SET @strSQL= 'SELECT COUNT(*) FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere

EXECUTE(@strSQL)

SET NOCOUNT OFF
GO



[解决办法]
PageSize=50 '设置每页显示条数
rsMerch.CursorLocation = adUseClient
Set rsMerch.ActiveConnection = Conn.AdodbConn '设置数据库连接
rsMerch.PageSize = PageSize   '分页
rsMerch.CacheSize = rsMerch.PageSize '设置每次从数据库获得记录条数
rsMerch.CursorType = adOpenForwardOnly
rsMerch.LockType = adLockOptimistic
rsMerch.Source = "select * from merchinfo "
rsMerch.open
如果是以常用到这个记录集,你可以把它保存在application中,
用的时候只需要set rsMerch=application( "rsMerch ") ,


intPage = 2 '当前页码
rsMerch.Move rsMerch.PageSize * (intPage - 1), adBookmarkFirst
Do While Not rsMerch.EOF And rsMerch.AbsolutePage = intPage
.........................................
rsMerch.MoveNext
Loop
rsMerch.close '注意:如果是保存在application中,就不要这句


附:ADODB常数值
const adUseClient=3
const adOpenForwardOnly=0
const adLockOptimistic=3
const adBookmarkFirst=1

[解决办法]
在网上搜索“页子分页类”,这个不错。
[解决办法]
不建议用存储过程分页。存储过程分页也是比较慢的,一般都是使用拼sql语句

热点排行