手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解
本来就是想来学习下手写分页或者自己写下分页逻辑,就当是一次练习,数据用的是sql2005,数据量是432W。
首先先感谢国家。然后在感谢csdn和群里的朋友跟我一起讨论。当然拉我知道我的做法不是最好的,但是手写一个是挺费劲的。
下面贴代码
private SqlConnection con = new SqlConnection( "Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=123456" ); protected void Page_Load( object sender, EventArgs e) { //数据显示,跟分页分开操作 con.Open(); DataSet ds = new DataSet(); int num =0; if ( string .IsNullOrWhiteSpace(Request[ "page" ]) ||Convert.ToInt32(Request[ "page" ])<=1) { num = 0; } else { num =Convert.ToInt32(Request[ "page" ])-1; } string sql = "select top 20 id,name,sex,age from aa where id not in (select top (20*" + num + ") id from aa order by id desc) order by id desc" ; SqlDataAdapter da = new SqlDataAdapter(sql, con); da.Fill(ds, "0" ); con.Close(); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); } //分页处理 public string pageIndex() { int num = 0; //当前页码 if ( string .IsNullOrWhiteSpace(Request[ "page" ]) || Convert.ToInt32(Request[ "page" ]) <= 1) { num = 1; } else { num = Convert.ToInt32(Request[ "page" ]) ; } //获取到数据库里面的全部数据条数,我没用存储过程用的是sql语句,有的回说存储过程效率高。 //亲 我测试数据库是432W数据 //亲 我查询的是一列, //亲 最重要的一点是我不会存储过程 //亲 我知道这么查效率低哦!~但是我只查一次!~ StringBuilder sb = new StringBuilder(); con.Open(); string sql = "select count(id) from aa" ; SqlCommand com = new SqlCommand(sql, con); int count = Convert.ToInt32(com.ExecuteScalar()); con.Close(); int page = 0; //页总数 page = ( int )Math.Ceiling(( decimal ) count / 20); //int from = num / 10 * 10 + 1;//起始页 int from = 0; int to = 0; //计算极值 if ( from % 10 == 0) { int tmp = num - 1; from = (tmp / 10) * 10 + 1; to = tmp / 10 * 10 + 11; } else { to = num / 10 * 10 + 11; //终止页 from = num / 10 * 10 + 1; } if (num != 1) { sb.AppendLine( "<a href='?page=" + (num - 1) + "'>上一页</a>" ); } else { sb.AppendLine( "<strong>上一页</strong>" ); } for ( int i = from ; i < to && i < page; i++) { if (i == num) sb.AppendLine( "<strong>" +i+ "</strong>" ); else sb.AppendLine( "<a href='?page=" + i + "'>" + i + "</a>" ); } if (to - from >= 10) { sb.AppendLine( "<a href='?page=" + ( from + 10) + "'>...</a>" ); } if (num <= page) { sb.AppendLine( "<a href='?page=" + (num +1) + "'>下一页</a>" ); } return sb.ToString(); |
我觉得这个分页还可以优化。当然会有很多人说用存储过程啊!用分页控件啊!
恩。。好吧 但是如果只有几百条数据的时候还需要写存储过程么?如果只让用access呢?我这个速度还是可以的总数 不到1秒就全部读出来了。
希望高手能帮忙讲解下 谢谢拉 处女帖!~
作者:小胖李
出处:http://www.cnblogs.com/minCS/
本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

依旧牛逼依旧狂依旧是个小流氓
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?