当前位置:编程学习 > C#/ASP.NET >>

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

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();
--------------------编程问答-------------------- 分页很简单的 写一个存储过程 可以通用了 就几行代码 后台直接调用 --------------------编程问答-------------------- 分页控件。参考吴旗娃做的AspNetPager控件.
http://bbs.csdn.net/topics/390285853 --------------------编程问答--------------------
引用 1 楼 oWeiXiaoHua 的回复:
分页很简单的 写一个存储过程 可以通用了 就几行代码 后台直接调用
正解 --------------------编程问答-------------------- 你这样写是从SQL取得所有数据,然后再来分页填充到DataSet里,你写SQL语句的时候,只查询分页要显示的那些数据返回,这样就快很多。分页查询语句有很多写法,可以网上复制一些,比较好的是用RowNumber(好像需要SQL2005及以后版本) --------------------编程问答-------------------- 若想加快分页,实现真正的数据分页,必须使用SQL分页语句或SQL分页存储过程,这些都得自己写,至于怎么写,网上有许多实例,也不是很难的! --------------------编程问答-------------------- 我写过一个sql server分页存储过程生成工具:http://www.webdiyer.com/Controls/AspNetPager/SpGenerator ,用这个配合AspNetPager分页性能要好的多。 --------------------编程问答-------------------- 临时表~! --------------------编程问答-------------------- 有三种分页方法,客户端,服务器端和,SQL数据库分页.个有余缺点. --------------------编程问答-------------------- 用分页存储过程无误 --------------------编程问答-------------------- 楼主知道真分页与假分页不?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,