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的分页方法的更多相关文章

  1. Sql Server 2012 的新分页方法分析(offset and fetch) - 转载

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...

  2. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  3. SharePoint2013 SharePoint-Hosted 模式 分页方法

    /**分页js插件 var ListPager = new listPaging(); 先调用start方法加载上下文 然后调用dataLoad方法查询第一页数据 需要设置几个属性值 ListPage ...

  4. C#针对DataTable进行分页方法

    以下的分页方法是针对数据量不是非常大的数据进行的,是在内存中进行的分页操作. /// <summary> /// DataTable分页 /// </summary> /// ...

  5. Oracle 分页方法研究

    1.Oracle 中的三大分页方法 1.1.通过分析函数分页 1.2.通过 ROWNUM 分页 1.3.通过 ROWID 分页 2.Oracle 分页解决方案浅析 2.1.纯后端代码完成分页 2.2. ...

  6. Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

    我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...

  7. Sql Server 2012 分页方法分析(offset and fetch)

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中  offse ...

  8. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  9. 纯JS前端分页方法(JS分页)

    1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...

随机推荐

  1. MLlib-聚类

    聚类 例子 流聚类 例子 聚类 MLlib支持k-means聚类,一种最常用的聚类方法,将数据点聚成指定数据的簇.MLlib实现了一种k-means++的并行变种,叫做kmeansII.MLlib的实 ...

  2. phpinfo.php

    ---恢复内容开始--- apache中的配置不对 查看httpd.conf文件中是否有: AddType ...... AddType application/x-httpd-php .php -- ...

  3. XCode7打包上传报错

      在XCode7上传应用时,上传失败遇到两个错误,提示如下: ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundl ...

  4. 重构后的程序:通过rsync命令抓取日志文件

    push.sh #!/bin/bash function push() { local ip=$ local user=$ local password=$ local path=$ local lo ...

  5. cf C. Hamburgers

    http://codeforces.com/contest/371/problem/C 二分枚举最大汉堡包数量就可以. #include <cstdio> #include <cst ...

  6. ISO7816协议中几个时间

    T=0协议 第一.初始等待时间: 复位应答时,卡片回复的连续两个数据的起始沿之间的时间间隔,这个时间间隔不超过9600etu, 在波 特率为9600是,该时间为1s 第二.GT: 两个连续字符之间的最 ...

  7. perl 正则详解

    用/s 来匹配任意字符 默认情况下,点号(.)无法匹配换行符,这对大多数单行匹配的情况是合适的. . 圆点用于匹配除换行符外的任何单个字符 + 意味着一个或多个相同的字符 .+ 匹配任意单个字符至少一 ...

  8. Autodesk 开源 3D 打印机

    Autodesk 开源 3D 打印机 Autodesk在知识共享-署名-相同方式共享许可证下公开了其3D打印机Ember的树脂.机械设计.电路图纸的细节,在GNU GPL许可证下公开了固件.打印机运行 ...

  9. HDU Sky数 2079 简单易懂的代码

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=2097 思路 既然要求和 十进制数字各个位数上的和是相同的, 那么16,12进制转换完之后也是10进制表示的 ...

  10. 【最短路】Vijos P1046 观光旅游

    题目链接: https://vijos.org/p/1046 题目大意: 给n个点(n<=100),m条无向边(m<=10000),问这张图的最小环长度. (注意:无自环,同一个点对之间的 ...