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. JavaScript重复元素处理

    判断一个字符串中出现次数最多的字符,统计这个次数 //将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 var str = "abcdefgadd ...

  2. gchart 插件API

    data: 一个二维数组,参数类型如下:[[, , ], [, , ], [, , ]] size: 图片显示的大小 ( width x height ) 300x200 type: 前面已经说过了 ...

  3. 学习python——博客记录第一天

    HELLO WORLD!   今天第一次开立博客,专门记载学习编程语言中的点点滴滴.今日学习内容: 搭建vs code+ python3.5 "ide" 学习廖雪峰python教程 ...

  4. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  5. 11 - 改变vtkImageData中的Manipulation 方法 VTK 6.0 迁移

    VTK6 引入了许多不兼容的变.这其中就包括关于vtkImageData中元数据管理及内存分配的方法.这些方法有些直接改变了行为或者能加了额外的参数. GetScalarTypeMin() GetSc ...

  6. hdu 3912 Turn Right

    http://acm.hdu.edu.cn/showproblem.php?pid=3912 这个题我用递归深搜模拟,直接爆栈了.哭啊!为什么! 这个题最主要是能走重复格子,但是方向不一样. 我用的剪 ...

  7. pl/sql 程序块里打印问题

    declare v_number NUMBER; v_number2 NUMBER; begin select count(*) into v_number from dual; DBMS_OUTPU ...

  8. Delphi Ini 操作简单例子

    interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialog ...

  9. Tomcat的错误 之 java.lang.IllegalArgumentException: Document base * does not exist

    Tomcat的异常 之 java.lang.IllegalArgumentException: Document base 有些刚开始使用的Tomcat的朋友会出现的问题,明明已经将某个web应用从t ...

  10. OpenStack Networking

    今天的数据中心网络比以往不论什么时候包括的设备都要多,比如server.网络设备.存储系统和安全设备等.这当中有非常多被近一步划分为多个虚拟机和虚拟网络.IP地址的数量.路由配置和安全规则能够迅速达到 ...