zoukankan      html  css  js  c++  java
  • 分页存储过程

    存储过程

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go


    ALTER proc [dbo].[getRecordByPage]
    @TotalPage int output,--总页数
    @RowsCount int output,--总条数
    @PageSize int,--每页多少数据
    @CurrentPage int,--当前页数
    @SelectFields nvarchar(1000),--select 语句但是不包含select
    @IdField nvarchar(50),--主键列
    @OrderField nvarchar(50),--排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件
    @OrderType nvarchar(4),--1升序,0降序
    @TableName nvarchar(200),--表名
    @strWhere nvarchar(300)--条件
    As
    Begin
    declare @RecordCount float
    declare @PageNum int --分页依据数
    Declare @Compare nvarchar(50)--比较字段区分min或者max
    Declare @Compare1 nvarchar(2) --大于号“>” 或者小于号"<“
    Declare @OrderSql nvarchar(10)--排序字段
    declare @Sql nvarchar(4000)
    Declare @TemSql nvarchar(1000)
    Declare @nRd int
    declare @afterRows int
    declare @tempTableName nvarchar(10)

    if(@OrderType='1')
    Begin
    set @OrderSql=' asc'
    End
    Else
    Begin
    set @OrderSql= ' desc'
    End


    if(isnull(@strWhere, '')<>'')
    Set @strWhere = @strWhere
    if(@strWhere='')
    Set @strWhere=' 1=1 '

    Set @TemSql='Select @RecordCount=Count(1) from '+@TableName +' where '+@strWhere
    exec sp_executesql @TemSql,N'@RecordCount float output',@RecordCount output
    Set @RowsCount=@RecordCount
    Set @TotalPage= ceiling(@RecordCount/@PageSize)
    if(@CurrentPage>@TotalPage)
    Set @CurrentPage=@TotalPage
    if(@CurrentPage<1)
    Set @CurrentPage=1
    if(@PageSize<1)
    Set @PageSize=1
    print(@RecordCount)


    if(@CurrentPage=1)
    Begin
    set Rowcount @PageSize
    set @Sql='select '+ @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +'

    '+@OrderSql +','+@IdField +' desc'
    --print(@Sql)
    exec sp_executeSql @Sql

    End
    else if(@CurrentPage=@TotalPage)
    begin
    set @afterRows=@RowsCount-(@CurrentPage-1)*@PageSize
    set RowCount @afterRows
    if(@OrderType='1')
    begin
    set @OrderField=REPLACE(@OrderField,'asc','lai512343975')
    set @OrderField=REPLACE(@OrderField,'desc','asc')
    set @OrderField=REPLACE(@OrderField,'lai512343975','desc')
    set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' desc'+','+@IdField +' asc'

    end
    else
    begin
    set @OrderField=REPLACE(@OrderField,'desc','lai512343975')
    set @OrderField=REPLACE(@OrderField,'asc','desc')
    set @OrderField=REPLACE(@OrderField,'lai512343975','asc')
    set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' asc ' +','+@IdField+ ' asc,regdate desc'
    print(@Sql)
    end
    --print(@Sql)
    exec sp_executeSql @Sql
    end
    else
    Begin
    set @nRd=@PageSize* (@CurrentPage-1)
    print(@nRd)


    set RowCount @PageSize
    set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' and '+@IdField + ' not in (select top '+ cast(@nRd as nvarchar(10))+' '+@IdField+' from '+@TableName+' where '+ @strWhere+' order by '+@OrderField +' '+@OrderSql+','+@IdField +' desc) ' + ' order by '+ @OrderField + ' ' +@OrderSql+','+@IdField +' desc'
    exec sp_executeSql @Sql
    --Print(@sql)
    End
    end

     /// <summary>
            /// 分页数据库操作函数
            /// </summary>
            /// <param name="TotalPage">总页数</param>
            /// <param name="RowsCount">总条数</param>
            /// <param name="PageSize">每页多少数据</param>
            /// <param name="CurrentPage">当前页</param>
            /// <param name="SelectFields">返回的列</param>
            /// <param name="IdField">主键</param>
            /// <param name="OrderField">排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件 </param>
            /// <param name="OrderType">1升序,0降序</param>
            /// <param name="TableName">表名</param>
            /// <param name="strWhere">条件</param>
            /// <returns></returns>
            public static DataTable GetDataTableDuoDuo(int TotalPage, int RowsCount, int PageSize, int CurrentPage, string SelectFields, string IdField, string OrderField, string OrderType, string TableName, string strWhere)
            {
                SqlParameter[] param = new SqlParameter[]
                {
                    new SqlParameter("@TotalPage", TotalPage),
                    new SqlParameter("@RowsCount", RowsCount),
                    new SqlParameter("@PageSize", PageSize),
                    new SqlParameter("@CurrentPage", CurrentPage), 
                    new SqlParameter("@SelectFields", SelectFields),
                    new SqlParameter("@IdField", IdField),   
                    new SqlParameter("@OrderField", OrderField),   
                    new SqlParameter("@OrderType", OrderType),
                    new SqlParameter("@TableName",TableName),
                    new SqlParameter("@strWhere",strWhere)
                };
                return SqlHelper.ExecuteTable(CommandType.StoredProcedure, "getRecordByPage", param);
            }

    前台页面 分页字符串

     /// <summary>
            /// 获取分页字符串
            /// </summary>
            /// <param name="page">当前页码</param>
            /// <param name="pageSize">页面大小</param>
            /// <param name="Url">分页链接</param>
            /// <param name="strWhere">查询条件</param>
            /// <param name="tblName">数据表</param>
            ///  <param name="pageType">页面类型(文件夹名字)</param>
            /// <param name="typeId">类别id</param>
            /// <returns></returns>
            public static string GoToPager(int page, int pageSize, string Url, string strWhere, string tblName, string pageType, int typeId)
            {
                if (tblName == null) goto Err;

                DataTable tb = GetDataTable(strWhere, tblName);
                int Count = Convert.ToInt32(tb.Rows[0]["Total"]);  //取得总的记录数

                StringBuilder strHtml = new StringBuilder();
                int prevPage = page - 1;    //上一页
                int nextPage = page + 1;    //下一页
                int startPage;
                int pageCount = (int)Math.Ceiling((double)Count / pageSize);    //总页数
                if (pageCount <= 1)
                {
                    return "";
                }

                strHtml.Append("<div class=\"pg mar_top\">");
                strHtml.Append("<p class=\"page\">");
                if (prevPage < 1)
                {
                    strHtml.Append("<span class=\"page1\">首页</span>");
                    strHtml.Append("<span class=\"page1\">上一页</span>");
                }
                else
                {
                    strHtml.Append("<span class=\"page1\"><a title=\"\" href=\"" + Url + "1" + Base.BasePage.Config.Rewrite + "\">首页</a></span>");
                    strHtml.Append("<span class=\"page1\"><a title=\"\" href=\"" + Url + prevPage + Base.BasePage.Config.Rewrite + "\">上一页</a></span>");
                }
                if (page % 6 == 0)
                {
                    startPage = page - 5;
                }
                else
                {
                    startPage = page - page % 6 + 1;
                }
                if (startPage > 6)
                {
                    strHtml.Append(@"<span><a href='");
                    strHtml.Append(Url);
                    strHtml.Append(startPage - 1 + Base.BasePage.Config.Rewrite);
                    strHtml.Append(@"'>...</a></span>");
                }
                for (int i = startPage; i < startPage + 6; i++)
                {
                    if (i > pageCount) break;
                    if (i == page)
                    {
                        //strHtml.Append("<span class=\"page2\">" + i + "</span>");
                    }
                    else
                    {
                        //strHtml.Append("<span class=\"page1\"> <a href=" + Url + i + Base.BasePage.Config.Rewrite + ">" + i + "</a> </span>");
                    }
                }
                //if (pageCount >= startPage + 6) strHtml.Append(@"<span><a href='" + Url + (startPage + 6) + Base.BasePage.Config.Rewrite + "'>...</a></span>");
                if (nextPage > pageCount)
                {
                    strHtml.Append("<span class=\"page1\">下一页</span>");
                    strHtml.Append("<span class=\"page1\">末页</span>");
                }
                else
                {
                    strHtml.Append("<span class=\"page1\"><a href='" + Url + nextPage + Base.BasePage.Config.Rewrite + "'>下一页</a></span>");
                    strHtml.Append("<span class=\"page1\"><a href='" + Url + pageCount + Base.BasePage.Config.Rewrite + "'>末页</a></span>");
                }

                strHtml.Append("当前页:<font class=\"f_c00\">" + page + "</font>/" + pageCount + "页 共<font class=\"f_c00\">" + Count + "</font>条");
                strHtml.Append(" 转到<SELECT id=select1 LANGUAGE=javascript onchange=\"location.href=this.value\">");
                strHtml.Append("<OPTION>请选择</OPTION>");
                for (int i = 1; i <= pageCount; i++)
                {
                    strHtml.Append("<OPTION value=\"" + Base.BasePage.Config.WebURL + "" + pageType + "/" +Url+ i + ".aspx\">第" + i + "页</OPTION>");
                }
                strHtml.Append("</SELECT>");
                strHtml.Append("</p>");
                strHtml.Append("</div>");

                return strHtml.ToString();

            Err:
                return "缺少数据表或视图";
            }

  • 相关阅读:
    一个Spring的应用看起来象什么?
    IOC的优点是什么?
    解释对象/关系映射集成模块?
    XMLBeanFactory?
    使用Spring框架的好处是什么?
    什么是Spring MVC框架的控制器?
    什么是Spring的MVC框架?
    在Spring AOP 中,关注点和横切关注的区别是什么?
    你更倾向用那种事务管理类型?
    Spring支持的事务管理类型?
  • 原文地址:https://www.cnblogs.com/yhdkzy/p/1987774.html
Copyright © 2011-2022 走看看