这样做分页为何很慢,有木有更好的办法?

bszzss 2012-12-07 03:03:39
var MySQL = "select * from "+ViewName+" "+WhereStr1+" "+ OrderByStr +"";
// where F0001 = '"+ F0001 +"' "
var RecordCount = CountRecord(MySQL);
var rowstart=parseInt(PageSize*(iPage-1));
var rowend =PageSize*iPage;
conn.Open();
var sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand(MySQL,conn);
var rs=new DataSet();
sda.Fill(rs,rowstart,PageSize,"tab");
var FieldsCount=rs.Tables["tab"].Columns.Count;
var PageCount = parseInt(RecordCount / PageSize); //rs.PageCount与rs.PageSize有关,必须放在其后
if(RecordCount % PageSize>0)
{
PageCount=PageCount+1;
}
rw("<thead><tr>")
for(var i=1 ; i< FieldsCount; i++)
{
rw("<th nowrap title='"+rs.Tables["tab"].Columns[i].DataType+"/"+rs.Tables["tab"].Columns[i].DataType+"/"+FldsAtt[i][3]+"' class='mtt' onclick=\"orderby("+i+")\">"+ FldsAtt[i][6] +
"<span style='FONT-FAMILY:\"Wingdings 3\";color:#FF77FF;font-size:6pt;' id='OrdBy"+i+"'></span></th>")
}
rw("</tr></thead><tbody>");
for(var i=1 ; i< FieldsCount; i++)
{
rw("<col align='");
if (rs.Tables["tab"].Columns[i].DataType==adTinyInt || rs.Tables["tab"].Columns[i].DataType==adSmallInt || rs.Tables["tab"].Columns[i].DataType==adUnsignedTinyInt ||
rs.Tables["tab"].Columns[i].DataType==adInteger || rs.Tables["tab"].Columns[i].DataType==adBigInt)
rw("right");
else if (rs.Tables["tab"].Columns[i].DataType==adDouble || rs.Tables["tab"].Columns[i].DataType==adDecimal || rs.Tables["tab"].Columns[i].DataType==adCurrency)
rw("right");
else if (rs.Tables["tab"].Columns[i].DataType==adDate || rs.Tables["tab"].Columns[i].DataType==adDBDate || rs.Tables["tab"].Columns[i].DataType==adDBTimeStamp)
rw("right");
else
rw("left");
rw("'>");
}
if (PageCount>0)
{
if (iPage > PageCount)
{
iPage = PageCount;
}
for(var i=0;i<rs.Tables["tab"].Rows.Count;i++)
{
if (onclk=="no")
{
onclkstr= "";
} else
{
onclkstr= "onclick=\"window.open('"+OprStr+"?a="+rs.Tables["tab"].Rows[i][1]+"','"+WinName+"')\"";
}
rw("<tr language='javascript' align='center' valign='middle' class=mt"+(i%2)+
" onmouseover=this.className=\"mt2\" onmouseout=this.className=\"mt"+(i%2)+"\">");
rw("<td nowrap "+onclkstr+" style='cursor:hand;'>"+rs.Tables["tab"].Rows[i][1]+"</td>");
for(var ii=2 ; ii< FieldsCount; ii++)
{
var fldval= rs.Tables["tab"].Rows[i][ii]+"";
if (fldval=="null" || fldval.replace(/\s/g,"") == "")
rw("<td nowrap>"+SHOWNULL+"</td>");
else if (rs.Tables["tab"].Columns[ii].DataType==adTinyInt || rs.Tables["tab"].Columns[ii].DataType==adSmallInt || rs.Tables["tab"].Columns[ii].DataType==adUnsignedTinyInt ||
rs.Tables["tab"].Columns[ii].DataType==adInteger || rs.Tables["tab"].Columns[ii].DataType==adBigInt)
rw("<td nowrap>"+fldval+"</td>");
else if (rs.Tables["tab"].Columns[ii].DataType==adDouble || rs.Tables["tab"].Columns[ii].DataType==adDecimal || rs.Tables["tab"].Columns[ii].DataType==adCurrency)
{
// Math.round(rs(ii).value,3)
if(parseFloat(fldval)>0) rw("<td nowrap>"+parseFloat(fldval).toFixed(FRACTION)+"</td>");
else if(parseFloat(fldval)==0) rw("<td nowrap>"+SHOWZERO+"</td>");
else if(parseFloat(fldval)<0) rw("<td nowrap><font color='"+NEGATIVE+"'>"+parseFloat(fldval).toFixed(FRACTION)+"</font></td>");
} else if (rs.Tables["tab"].Columns[ii].DataType==adDate || rs.Tables["tab"].Columns[ii].DataType==adDBDate || rs.Tables["tab"].Columns[ii].DataType==adDBTimeStamp)
rw("<td nowrap title='"+new Date(fldval).toTimeString()+"'>"+new Date(fldval).toLocaleDateString1()+"</td>");
else
{
if (fldval.length>30)
{
rw("<td nowrap title='"+fldval+"'>"+fldval.substring(0,30)+"...</td>");
} else
{
rw("<td nowrap>"+fldval+"</td>");
}
}
}
rw("</tr>");
}

}
rw("</tbody>");

conn.Close();
...全文
259 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2012-12-08
  • 打赏
  • 举报
回复
楼主知道真分页与假分页不?
personball 2012-12-08
  • 打赏
  • 举报
回复
用分页存储过程无误
leeming 2012-12-08
  • 打赏
  • 举报
回复
有三种分页方法,客户端,服务器端和,SQL数据库分页.个有余缺点.
Assassin_ 2012-12-08
  • 打赏
  • 举报
回复
临时表~!
webdiyer 2012-12-08
  • 打赏
  • 举报
回复
我写过一个sql server分页存储过程生成工具:http://www.webdiyer.com/Controls/AspNetPager/SpGenerator ,用这个配合AspNetPager分页性能要好的多。
梦在旅途 2012-12-07
  • 打赏
  • 举报
回复
若想加快分页,实现真正的数据分页,必须使用SQL分页语句或SQL分页存储过程,这些都得自己写,至于怎么写,网上有许多实例,也不是很难的!
  • 打赏
  • 举报
回复
你这样写是从SQL取得所有数据,然后再来分页填充到DataSet里,你写SQL语句的时候,只查询分页要显示的那些数据返回,这样就快很多。分页查询语句有很多写法,可以网上复制一些,比较好的是用RowNumber(好像需要SQL2005及以后版本)
foreveryimada 2012-12-07
  • 打赏
  • 举报
回复
引用 1 楼 oWeiXiaoHua 的回复:
分页很简单的 写一个存储过程 可以通用了 就几行代码 后台直接调用
正解
耗子哭死猫 2012-12-07
  • 打赏
  • 举报
回复
分页控件。参考吴旗娃做的AspNetPager控件. http://bbs.csdn.net/topics/390285853
oWeiXiaoHua 2012-12-07
  • 打赏
  • 举报
回复
分页很简单的 写一个存储过程 可以通用了 就几行代码 后台直接调用

62,025

社区成员

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

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

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

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