100分求分页代码:我用DATAGrid+DataSet分页,数据多了好慢

billyou 2003-03-21 08:47:10
100分求分页代码:我用DATAGrid+DataSet分页,数据多了好慢
有什么好的方法没有?效率较高的
不够另给分!!!
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
azev 2003-03-23
  • 打赏
  • 举报
回复
realljx(至尊十三少)
你的方法还是ms标准的dg分页方法

最好的是select top
Lovemartyr 2003-03-23
  • 打赏
  • 举报
回复
我的分页是这样写的,但愿能给你帮助.

CREATE PROCEDURE Bbs_Article_List
@iSubject NVARCHAR (255),
@iPage INT,
@iPageSize INT,
@iPageCount INT OUTPUT,
@iNewCount INT OUTPUT,
@iReplyCount INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @iStart DATETIME
DECLARE @iEnd DATETIME
DECLARE @iTmpSelect NVARCHAR (1000)
DECLARE @iRowCount INT
SELECT @iNewCount=Count(*)
FROM tArticles
WHERE rSubject=@iSubject And rIsDel=0 And rRepID=0
SELECT @iReplyCount=Count(*)
FROM tArticles
WHERE rSubject=@iSubject And rIsDel=0 And rRepID<>0
SELECT @iPageCount=Count(*)
FROM tArticles
WHERE rSubject=@iSubject And rIsTop=0 And rIsDel=0 And rRepID=0


SELECT @iPageCount=CEILING(@iPageCount/@iPageSize)+1

IF @iPage<1
SELECT @iPage=1

IF @iPage>@iPageCount
SELECT @iPage=@iPageCount

SET @iRowCount = (@iPage-1) * @iPageSize + 1

SELECT @iTmpSelect = 'SET NOCOUNT ON;SET ROWCOUNT @SPIntRowCount;SELECT @SPIntBeginID = rLastReplyTime FROM tArticles WHERE rSubject='+@iSubject+' And rIsTop=0 And rIsDel=0 And rRepID=0 ORDER BY rLastReplyTime DESC'
EXECUTE SP_EXECUTESQL
@iTmpSelect,
N'@SPIntRowCount INT,@SPIntBeginID DATETIME OUTPUT',
@SPIntRowCount=@iRowCount,@SPIntBeginID=@iStart OUTPUT

SET @iRowCount = @iPage * @iPageSize

SELECT @iTmpSelect = 'SET NOCOUNT ON;SET ROWCOUNT @SPIntRowCount;SELECT @SPIntEndID = rLastReplyTime FROM tArticles WHERE rSubject='+@iSubject+' And rIsTop=0 And rIsDel=0 And rRepID=0 ORDER BY rLastReplyTime DESC'
EXECUTE SP_EXECUTESQL
@iTmpSelect,
N'@SPIntRowCount INT,@SPIntEndID DATETIME OUTPUT',
@SPIntRowCount=@iRowCount,@SPIntEndID=@iEnd OUTPUT

SELECT @iTmpSelect = 'SET NOCOUNT OFF;SET ROWCOUNT 0;SELECT * FROM tArticles WHERE rSubject='+@iSubject+' And rIsTop=0 And rIsDel=0 And rRepID=0 AND rLastReplyTime BETWEEN'
IF @iEnd > @iStart
SELECT @iTmpSelect = @iTmpSelect+' @SPIntBeginID AND @SPIntEndID ORDER BY rLastReplyTime DESC'
ELSE
SELECT @iTmpSelect = @iTmpSelect+' @SPIntEndID AND @SPIntBeginID ORDER BY rLastReplyTime DESC'

EXECUTE SP_EXECUTESQL
@iTmpSelect,
N'@SPIntEndID DATETIME,@SPIntBeginID DATETIME',
@SPIntEndID=@iEnd,@SPIntBeginID=@iStart

SET NOCOUNT OFF

END
GO
realljx 2003-03-22
  • 打赏
  • 举报
回复
我有更优的办法:objAdapter.Fill(ds,pageStart,maxPerpage,"Table")
ycgx 2003-03-22
  • 打赏
  • 举报
回复
打开自定义分页功能,然后让Select语句每次从数据表中获得的记录数是分页的页数
我想这应该是最优的了
billyou 2003-03-22
  • 打赏
  • 举报
回复
piaoxue225(piaoxue225):
没看到亚?
piaoxue225 2003-03-21
  • 打赏
  • 举报
回复
飞翔.net论坛
http://www.aspxcn.net
--------------------------
给你答案

glboy 2003-03-21
  • 打赏
  • 举报
回复
不然你也可以直接使用这样的SQL语句:
select top N * from table where ... order by SomeField
gasover 2003-03-21
  • 打赏
  • 举报
回复
用两个嵌套的 SELECT TOP 语句来指定每页的数据行数。
terryxin 2003-03-21
  • 打赏
  • 举报
回复
要不把数据搂到客户端,这样处理起来速度就会不是问题,不然就显示一定数量的数据,比如最新的500笔
billyou 2003-03-21
  • 打赏
  • 举报
回复
可是,不用存储过程可以吗?
houjianxun 2003-03-21
  • 打赏
  • 举报
回复
参考:

实现“存储过程实现分页”来提高速度

http://expert.csdn.net/Expert/topic/1491/1491533.xml?temp=.8106806
glboy 2003-03-21
  • 打赏
  • 举报
回复
可以参考:
http://expert.csdn.net/Expert/topic/1491/1491533.xml?temp=.0799219

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧