using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace BLL { public static class PagingHelper { /// /// 获取分页SQL语句,默认ROW_NUMBER为关健字,所有表不允许使用该字段名 /// /// 记录总数 /// 每页记录数 /// 当前页数 /// SQL查询语句 /// 排序字段,多个则用“,”隔开 /// 分页SQL语句 public static DataTable CreatePage(int _pageSize, int _pageIndex, string _safeSql, string _orderField, IDataParameter[] parameters, out int RecordCount) { //拼接SQL字符串,加上ROW_NUMBER函数进行分页 StringBuilder newSafeSql = new StringBuilder(); newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as RowIndex,", _orderField); newSafeSql.Append(_safeSql.Substring(_safeSql.ToUpper().IndexOf("SELECT") + 6)); //拼接成最终的SQL语句 StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT * FROM ("); sbSql.Append(newSafeSql.ToString()); sbSql.Append(") AS T"); sbSql.AppendFormat(" WHERE RowIndex > {0} and RowIndex<={1}", ((_pageIndex - 1) * _pageSize), _pageIndex * _pageSize); sbSql.Append(" "); sbSql.AppendFormat(" SELECT COUNT(1) AS RecordCount FROM ({0}) AS T ", _safeSql); //return sbSql.ToString(); DataSet ds = SQLHelper.RunSqlStrings(sbSql.ToString(), parameters); DataTable table = ds.Tables[0]; RecordCount = int.Parse(ds.Tables[1].Rows[0]["RecordCount"].ToString()); return table; } } }