返回List的分页方法
cs代码
/// <summary>
/// 处理分页检索存储过程(SQL2005)
/// </summary>
/// <param name="fields">需要查询的字段</param>
/// <param name="tables">表名</param>
/// <param name="filters">sql条件</param>
/// <param name="sortStr">排序字符串</param>
/// <param name="currentPage">当前页</param>
/// <param name="pageSize">每页记录数</param>
/// <param name="total">总记录数</param>
/// <param name="totalPage">总页数</param>
/// <returns>DataTable</returns>
protected IList<T> ExecutePaginationQueryListSP<T>(string fields, string tables, string filters, string sortFields, string sortType,
int currentPage, int pageSize, out int total) where T : new()
{
IList<T> result=default(List<T>);
string spName = "ceb_Pagination";
//参数赋值
SqlParameter pFields = new SqlParameter("@fields", SqlDbType.NVarChar, 1000);
pFields.Value = fields;
SqlParameter pTables = new SqlParameter("@tables", SqlDbType.NVarChar, 400);
pTables.Value = tables;
SqlParameter pFilters = new SqlParameter("@filters", SqlDbType.NVarChar, 1000);
pFilters.Value = filters;
SqlParameter pSortFields = new SqlParameter("@sortfields", SqlDbType.NVarChar, 100);
pSortFields.Value = sortFields;
SqlParameter pSortType = new SqlParameter("@sorttype", SqlDbType.NVarChar, 4);
pSortType.Value = sortType;
SqlParameter pCurrentPage = new SqlParameter("@currentpage", SqlDbType.Int);
pCurrentPage.Value = currentPage;
SqlParameter pPageSize = new SqlParameter("@pagesize", SqlDbType.Int);
pPageSize.Value = pageSize;
SqlParameter pTotal = new SqlParameter("@total", SqlDbType.Int);
pTotal.Direction = ParameterDirection.Output;
//添加参数
SqlParameter[] param = new SqlParameter[]{
pFields,
pTables,
pFilters,
pSortFields,
pSortType,
pCurrentPage,
pPageSize,
pTotal
};
try
{
total = Convert.ToInt32(pTotal.Value);
result=ExecuteQueryListSP<T>(spName, param);
}
catch (Exception e)
{
total = 0;
}
finally
{
Close();
}
return result;
}
///<summary>
///利用反射将SqlDataReader转换成List模型
///</summary>
///<param name="spName">存储过程名称</param>
///<returns></returns>
public virtual IList<T> ExecuteQueryListSP<T>(string spName, params SqlParameter[] listParams) where T : new()
{
IList<T> list = new List<T>();
Type type = typeof(T);
string tempName = string.Empty;
using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams)))
{
if (reader.HasRows)
{
//list = new List<T>();
while (reader.Read())
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;
//for (int intField = 0; intField < reader.FieldCount; intField++)
//{//遍历该列名是否存在
//}
if (readerExists(reader, tempName))
{
if (!pi.CanWrite)
{
continue;
}
var value = reader[tempName];
if (value != DBNull.Value)
{
pi.SetValue(t, value, null);
}
}
}
list.Add(t);
}
}
if (reader != null && (!reader.IsClosed))
{
reader.Close();
}
}
return list;
}
/// <summary>
/// 处理存储过程
/// </summary>
/// <param name="spName">存储过程名</param>
/// <param name="parameters">参数数组</param>
/// <returns>sql数据流</returns>
public virtual SqlDataReader ExecuteReaderSP(string spName, ArrayList parameters)
{
SqlDataReader result = null;
cmd.CommandText = spName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
if (parameters != null)
{
foreach (SqlParameter param in parameters)
{
cmd.Parameters.Add(param);
}
}
try
{
Open();
result = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
if (result != null && (!result.IsClosed))
{
result.Close();
}
//LogHelper.WriteLog("\r\n方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】" + spName, e);
// LogStackTrace.WriteError(e);
throw new Exception(e.Message);
}
//finally
//{
// Close();
//}
return result;
}
//存储过程
Create proc [dbo].[ceb_Pagination2005]
@strFields nvarchar(2000), --字段名
@strTableName nvarchar(2000), --表名
@strWhere nvarchar(4000), --条件 无需加where
@strOrderBy nvarchar(200), --排序 必添 无需加order by
@PageSize int, --分页大小
@CurrentPage int, --当前页,1为起始页
@PageCount int output, --返回总页数
@RecordCount int output --返回记录总数
as
begin
declare @StartIndex int --定义起始位置
set @StartIndex = (@currentPage - 1) * @PageSize + 1
declare @strSql1 nvarchar (Max) --数据查询
declare @strSql2 nvarchar (Max) --统计记录总数
declare @ParmDefinition nvarchar (Max)
set @ParmDefinition = N'@tmp int output'
set @strSql1 = N'select row_number() over (order by ' + @strOrderBy + ' ) as RowID, '
set @strSql2 = 'select @tmp = count(*) '
if @strFields <> ''
set @strSql1 = @strSql1 + @strFields
else
set @strSql1 = @strSql1 + ' * '
if @strTableName <> ''
begin
set @strSql1 = @strSql1 + ' from ' + @strTableName
set @strSql2 = @strSql2 + ' from ' + @strTableName
end
if @strWhere <> ''
begin
set @strSql1 = @strSql1 + ' where ' + @strWhere
set @strSql2 = @strSql2 + ' where ' + @strWhere
end
exec sp_executesql @strSql2,@ParmDefinition,@tmp = @RecordCount output --执行统计记录总数SQL语句
if @RecordCount % @PageSize = 0 --计算总页数
set @PageCount = @RecordCount / @PageSize
else
set @PageCount = @RecordCount / @PageSize + 1
set @strSql1 = 'with TempTable as ( ' + @strSql1 + ' ) select * from TempTable where RowID between '
+ Convert(varchar(10),@StartIndex) + ' and ' + Convert(varchar(10),@StartIndex + @PageSize - 1)
exec(@strSql1)
end
返回List的分页方法的更多相关文章
- Sql Server 2012 的新分页方法分析(offset and fetch) - 转载
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- SharePoint2013 SharePoint-Hosted 模式 分页方法
/**分页js插件 var ListPager = new listPaging(); 先调用start方法加载上下文 然后调用dataLoad方法查询第一页数据 需要设置几个属性值 ListPage ...
- C#针对DataTable进行分页方法
以下的分页方法是针对数据量不是非常大的数据进行的,是在内存中进行的分页操作. /// <summary> /// DataTable分页 /// </summary> /// ...
- Oracle 分页方法研究
1.Oracle 中的三大分页方法 1.1.通过分析函数分页 1.2.通过 ROWNUM 分页 1.3.通过 ROWID 分页 2.Oracle 分页解决方案浅析 2.1.纯后端代码完成分页 2.2. ...
- Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...
- Sql Server 2012 分页方法分析(offset and fetch)
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中 offse ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- 纯JS前端分页方法(JS分页)
1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...
随机推荐
- COUNT()函数的使用
COUNT函数 让我们能够数出在表格中有多少笔资料被选出来.它的语法是: SELECT COUNT("栏位名") FROM "表格名" 举例来说, ...
- window.location.href问题,点击,跳转到首页
onClick="window.location.href='./';" 点击,跳转到首页. location.href=url Js中实现跳转 window.location.h ...
- php 5.2 版本isset()方法小坑
PHP 5.2.17p1 (cli) (built: May 28 2015 16:15:30)Copyright (c) 1997-2010 The PHP GroupZend Engine v2. ...
- MongoDB-性能优化之索引
首先看一个实例 >;i<;i++){ db.indexdemo.insert({),"create":new Date});} WriteResult({ }) > ...
- python抓取网页图片
本人比较喜欢海贼王漫画,所以特意选择了网站http://www.mmonly.cc/ktmh/hzw/list_34_2.html来抓取海贼王的图片. 因为是刚刚学习python,代码写的不好,不要喷 ...
- 关于 wait_event_interruptible() 和 wake_up()的使用
来源:http://blog.csdn.net/allen6268198/article/details/8112551 1. 关于 wait_event_interruptible() 和 wake ...
- PIL Image 转成 wx.Image、wx.Bitmap
import wx from PIL import Image def ConvertToWxImage(): pilImage = Image.open('1.png') image = wx.Em ...
- 转:有事务处理的NoSQL数据库
原文来自于:http://www.infoq.com/cn/articles/MarkLogic-NoSQL-with-Transactions Java平台在其几乎整个生命周期中,都在煞费苦心地努力 ...
- Oracle除替换去掉换行符的方法
特殊符号ascii定义 : 换行符和回车符都要干掉. 制表符 chr(9) 换行符 chr(10) 回车符 chr(13) select replace(replace(列名,CHR(10),''), ...
- Jzzhu and Chocolate
CF#257 div2 C:http://codeforces.com/contest/450/problem/C 题意:n*m的方格,每次可以横着或者纵向的切一刀,问切k之后,最小的最大是多少. 题 ...