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. Smarty中{literal}的使用详解

     {literal} <script>function Login(){ document.LoginForm.submit();}</script>{/literal} == ...

  2. Vim记录

    Command Mode下: . 代表当前行 % 代表所有行 $ 代表结束行 :1,$normal i#     全部行前加#,同下 :%normal i# :read ! cd /usr/bin/; ...

  3. WPS怎样设置多级标题(如四级标题)

    WPS期初,乍一看最多只能设置三级标题. 怎样设置四级以上标题呢? 这里以设置四级标题为例: 点击‘视图’->'大纲', 假如,现在2.3.3这一行是三级标题: 在下拉框里选择‘4级’就可以了. ...

  4. Circular placeholder reference 'server.port' in property definitions

    Exception in thread "main" java.lang.IllegalArgumentException: Circular placeholder refere ...

  5. Linux2.6内核--内存管理(1)--分页机制

          在内核里分配内存可不像在其他地方分配内存那么容易.造成这种局面的因素很多.从根本上讲,是因为内核本身不能像用户空间那样奢侈的使用内存.内核与用户空间不同,它不具备这种能力,它不支持简单便捷 ...

  6. 【HDOJ】1474 Always On the Run

    普通DP.基本和floyd一个思路. /* 1474 */ #include <cstdio> #include <cstring> #include <cstdlib& ...

  7. POJ3267 The Cow Lexicon(dp)

    题目链接. 分析: dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数. dp[i] = min(dp[i+res]+res-strlen(pa[j])); 其中res 为从第 i 位开始匹配 ...

  8. Delphi Ini 操作简单例子

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

  9. C#中两个时间的比较

    var DateTimedt1 = Convert.ToDateTime(dt);     var DateTimedt2 = Convert.ToDateTime(DateTime.Now);    ...

  10. apache 创建虚拟目录

    <VirtualHost *:83>    DocumentRoot "E:\PhpProjects"</VirtualHost><Directory ...