返回List的分页方法

cs代码 

      ///


        /// 处理分页检索存储过程(SQL2005)
        ///

        /// 需要查询的字段
        /// 表名
        /// sql条件
        /// 排序字符串
        /// 当前页
        /// 每页记录数
        /// 总记录数
        /// 总页数
        /// DataTable
protected IList ExecutePaginationQueryListSP(string fields, string tables, string filters, string sortFields, string sortType,
                                                    int currentPage, int pageSize, out int total) where T : new()
        {
            IList result=default(List);
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(spName, param);
            }
            catch (Exception e)
            {
                total = 0;
            }
            finally
            {
                Close();
            }
            return result;
        }    


   ///

        ///利用反射将SqlDataReader转换成List模型
        ///

        ///存储过程名称
        ///


        public virtual IList ExecuteQueryListSP(string spName, params SqlParameter[] listParams) where T : new()
        {
            IList list = new List();


            Type type = typeof(T);


            string tempName = string.Empty;


            using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams)))
            {
                if (reader.HasRows)
                {
                    //list = new List();
                    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;


        }


     ///


        /// 处理存储过程
        ///

        /// 存储过程名
        /// 参数数组
        /// sql数据流
        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

你可能感兴趣的:(C#,sql)