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. PHP 设计模式之观察者模式 (转载)

    介绍      现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,事件.而有的人喜欢写杂文或者散文,有的人 ...

  2. jquery如何判断滚动条滚到页面底部并执行事件

    首先理解三个dom元素,分别是:clientHeight.offsetHeight.scrollTop. clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那 ...

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

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

  4. PHP之路——MySql查询语句

    1,select查询的基本结构 select 字段 from 表 where 过滤条件 group by 分组条件 having 过滤的第二条件 order by 排序条件 limit 限定结果条件; ...

  5. 转:聊聊并发(八)——Fork/Join框架介绍

    1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...

  6. CLOUDSTACK我也来啦

    最近,专业客户需要私有云和自助管理. 那我就倒一个CLOUDSTACK出来吧. WEB UI已搞定. 难点在于高级网络和主存储.再接再力. ... 因为要反复重装,在服务端有个快速重建步骤: serv ...

  7. 尽历磨难,搞定OPEN VSWITCH安装

    参考贴: http://sudomakeinstall.com/linux-systems/installing-openvswitch-on-centos-6-6-5 yum install ker ...

  8. 【转载51CTO】Linux中引号那些事儿

    原文链接:http://os.51cto.com/art/201207/348855.htm 我们将把编写脚本的事情暂时搁在一边,然后来讨论一些,我们一直在用的,但是没有解释的东西.引号在这一节里面, ...

  9. UVA196-Spreadsheet(拓扑排序)

    Spreadsheet In 1979, Dan Bricklin and Bob Frankston wrote VisiCalc, the first spreadsheet applicatio ...

  10. Sublime text 3 格式化HTML/css/js/json代码 插件

    JsFormat: 这里下载这插件包 https://github.com/jdc0589/JsFormat ,点油下角的zip就能下载 插件包放到sublime安装目录的Data\Packages目 ...