• 返回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(" 方法异常【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

  • 相关阅读:
    【MyEcplise SVN】myEcplise上安装SVN的多种方式
    【微信Java开发 --番外篇】错误解析
    【MyEcplise 插件】反编译插件jad
    maven打包自动配置数据库链接信息
    window.location下的属性说明
    JavaEETest
    java正则过虑字符
    微信小程序开发之大坑记之post请求
    jQuery 获取文件后缀的方法
    java通过解析文件获取apk版本等信息
  • 原文地址:https://www.cnblogs.com/dashi/p/4034633.html
Copyright © 2020-2023  润新知