asp.net 结合mysql存储过程进行分页代码
发布时间:2020-12-15 20:45:17 所属栏目:asp.Net 来源:网络整理
导读:不过在网上找了一些,发现都有一个特点――就是不能传出总记录数,干脆自己研究吧。终于,算是搞出来了,效率可能不是很好,但是我也觉得不错了。贴代码吧直接:也算是对自己学习mysql的一个记录。 复制代码 代码如下: CREATE PROCEDURE p_pageList ( m_pageN
不过在网上找了一些,发现都有一个特点――就是不能传出总记录数,干脆自己研究吧。终于,算是搞出来了,效率可能不是很好,但是我也觉得不错了。贴代码吧直接:也算是对自己学习mysql的一个记录。 复制代码 代码如下: CREATE PROCEDURE p_pageList ( m_pageNo int, m_perPageCnt int, m_column varchar(1000), m_table varchar(1000), m_condition varchar(1000), m_orderBy varchar(200), out m_totalPageCnt int ) BEGIN SET @pageCnt = 1; -- 总记录数 SET @limitStart = (m_pageNo - 1)*m_perPageCnt; SET @limitEnd = m_perPageCnt; SET @sqlCnt = CONCAT('select count(1) into @pageCnt from ',m_table); -- 这条语句很关键,用来得到总数值 SET @sql = CONCAT('select ',m_column,' from ',m_table); IF m_condition IS NOT NULL AND m_condition <> '' THEN SET @sql = CONCAT(@sql,' where ',m_condition); SET @sqlCnt = CONCAT(@sqlCnt,m_condition); END IF; IF m_orderBy IS NOT NULL AND m_orderBy <> '' THEN SET @sql = CONCAT(@sql,' order by ',m_orderBy); END IF; SET @sql = CONCAT(@sql,' limit ',@limitStart,',@limitEnd); PREPARE s_cnt from @sqlCnt; EXECUTE s_cnt; DEALLOCATE PREPARE s_cnt; SET m_totalPageCnt = @pageCnt; PREPARE record from @sql; EXECUTE record; DEALLOCATE PREPARE record; END asp.net 复制代码 代码如下: /// <summary> /// 分页显示 /// </summary> /// <param name="conn">连接数据库字符串</param> /// <param name="perPage">每页显示条数</param> /// <param name="columnList">查询的字段字符</param> /// <param name="tableName">查询的表名</param> /// <param name="condition">where条件(不用写where)</param> /// <param name="orderStr">排序条件(不用写order by)</param> /// <param name="pageInfo">返回页码的数组,0,1,2,3分别为 总记录集数,总页数,上一页,下一页,4开始为页码</param> /// <returns>此页的数据记录集</returns> public static DataTable PageList(string conn,int perPage,string url,string columnList,string tableName,string condition,string orderStr,out string[] pageInfo) { int pageNo = 1; //当前页码 int totalCnt = 1; //记录集总数 int pageCnt = 0; //总页数 DataTable dt = new DataTable(); //用于返回的DataTable using (MySqlConnection myConn = new MySqlConnection(conn)) { MySqlDataAdapter adp = new MySqlDataAdapter(); MySqlCommand cmd = new MySqlCommand(); if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["pageNo"])) { try { pageNo = int.Parse(System.Web.HttpContext.Current.Request["pageNo"].ToString()); } finally { } }//得到当前页面值 cmd.Connection = myConn; myConn.Open(); cmd.CommandText = "p_pageList"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("m_pageNo",MySqlDbType.Int32,11); cmd.Parameters.Add("m_perPageCnt",11); cmd.Parameters.Add("m_column",MySqlDbType.VarChar,1000); cmd.Parameters.Add("m_table",1000); cmd.Parameters.Add("m_condition",1000); cmd.Parameters.Add("m_orderBy",200); cmd.Parameters.Add("m_totalCnt",11); cmd.Parameters["m_pageNo"].Value = pageNo; cmd.Parameters["m_perPageCnt"].Value = perPage; cmd.Parameters["m_column"].Value = columnList; cmd.Parameters["m_table"].Value = tableName; cmd.Parameters["m_condition"].Value = condition; cmd.Parameters["m_orderBy"].Value = orderStr; cmd.Parameters["m_totalCnt"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); adp.SelectCommand = cmd; adp.Fill(dt); totalCnt = int.Parse(cmd.Parameters["m_totalCnt"].Value.ToString()); } pageCnt = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(totalCnt) / perPage)); if (pageNo > pageCnt) { pageNo = pageCnt; }//如果当前页码大于总页数,则当前页为最后一页 //处理页码地址参数 string pageNumLink = string.Empty; //页码的链接地址 if (string.IsNullOrEmpty(url.Trim())) { pageNumLink = "<a href="?pageNo="; } else if (url.IndexOf('?') >= 0) { pageNumLink = "<a href="" + url + "&pageNo="; } else { pageNumLink = "<a href="" + url + "?pageNo="; } //上一页,下一页字符串赋值 string abovePage = pageNumLink + (pageNo-1).ToString()+ "">上一页</a>"; string nextPage = pageNumLink + (pageNo + 1).ToString() + "">下一页</a>"; if (pageNo == 1) { abovePage = string.Empty; }//如果当前页为第一页,则不显示“上一页”字符串 if (pageNo == pageCnt) { nextPage = string.Empty; }//如果当前页为最后一页,则不显示“下一页”字符串 pageInfo = new string[14]; pageInfo[0] = totalCnt.ToString(); //显示记录集总数 pageInfo[1] = pageCnt.ToString(); //显示总页数 pageInfo[2] = abovePage; //显示上一页 pageInfo[3] = nextPage; //显示下一页 int startIndex; int endIndex; startIndex = (pageNo / 10) * 10 + 1; //起始页 if (pageNo % 10 == 0) { startIndex = startIndex - 10; } endIndex = startIndex + 9; //结束页 if (endIndex > pageCnt) { endIndex = pageCnt; }//如果结束页大于总页数,则结束页为最后一页值 int pageIndex = 4; for (int i = startIndex; i <= endIndex; i++) { string pageValue = pageNumLink + i.ToString() + "">" + i.ToString() + "</a>"; if (i == pageNo) { pageValue = i.ToString(); } pageInfo[pageIndex] = pageValue; pageIndex++; } return dt; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – 如何从Microsoft.NetCore.App 2.0更新到2.
- asp.net-mvc – 不应加载引用程序集以执行
- asp.net-core – 如何在IServiceCollection.Configure()中使
- 在我的asp.net-mvc页面中,为什么没有选择正确的下拉列表?
- asp.net-core – 日期输入标记帮助程序未显示数据库中的日期
- asp.net-mvc – MVC中的IE7仅样式表
- asp.net-mvc – ASP.net MVC路由参数异常
- IIS 7/ASP.Net管道如何工作?
- 处理vbscript中的时区
- ASP.NET MVC应用程序安全性
推荐文章
站长推荐
- swagger – Swashbuckle ASP.NET Core使用applic
- ASP.Net机器密钥,验证密钥和解密密钥 – 密钥长度
- asp.net-mvc – Kendo Grid导出到Excel – 所有页
- asp.net-mvc-3 – 指定Html.TextBoxFor的大小和最
- asp.net-mvc – Web Deploy/Publish正在添加一个
- 由于asp.net-C中的保护级别错误而无法访问#
- asp.net – 在日期字段中插入空值?
- asp.net-mvc – ASP.NET MVC 3中字典的隐藏输入
- asp.net – Visual Studio 2013上的Lorem快捷方式
- asp.net-mvc – ASP.NET vNext对ADO.NET的引用破
热点阅读