Asp.net 高性能数据分页函数,调用示例

17 篇文章 0 订阅

 

-- =============================================
-- Create date: <2006-11-05>
-- Description:    <高效分页存储过程,仅适用于Sql2005>
-- Notes:        <排序字段强烈建议建索引>
-- =============================================
create Procedure [dbo].[Page]
 @TableName varchar(50),        --表名
 @Fields varchar(1000) = *,    --字段名(全部字段为*)
 @OrderField varchar(1000),        --排序字段(必须!支持多字段)
 @sqlWhere varchar(1000) = Null,--条件语句(不用加where)
 @pageSize int,                    --每页多少条记录
 @pageIndex int = 1 ,            --指定当前为第几页
 @TotalPage int output            --返回总页数
as
begin

    Begin Tran --开始事务

    Declare @sql nvarchar(4000);
    Declare @totalRecord int;   

    --计算总记录数
        
    if (@SqlWhere= or @sqlWhere=NULL)
        set @sql = select @totalRecord = count(*) from + @TableName
    else
        set @sql = select @totalRecord = count(*) from + @TableName + where + @sqlWhere

    EXEC sp_executesql @sql,N@totalRecord int OUTPUT,@totalRecord OUTPUT--计算总记录数       
   
    --计算总数量
    select @TotalPage=@totalRecord--CEILING((@totalRecord+0.0)/@PageSize)+1

    if (@SqlWhere= or @sqlWhere=NULL)
        set @sql = Select * FROM (select ROW_NUMBER() Over(order by + @OrderField + ) as rowId, + @Fields + from + @TableName
    else
        set @sql = Select * FROM (select ROW_NUMBER() Over(order by + @OrderField + ) as rowId, + @Fields + from + @TableName + where + @SqlWhere   
       
   
    --处理页数超出范围情况
    if @PageIndex<=0
        Set @pageIndex = 1
   
    if @pageIndex>@TotalPage
        Set @pageIndex = @TotalPage

     --处理开始点和结束点
    Declare @StartRecord int
    Declare @EndRecord int
   
    set @StartRecord = (@pageIndex-1)*@PageSize + 1
    set @EndRecord = @StartRecord + @pageSize - 1

    --继续合成sql语句
    set @Sql = @Sql + ) as + @TableName + where rowId between + Convert(varchar(50),@StartRecord) + and +  Convert(varchar(50),@EndRecord)
    --print @Sql
    Exec(@Sql)

-- print @totalRecord
    If @@Error <> 0
      Begin
        RollBack Tran
        Return -1
      End
     Else
      Begin
  Commit Tran
     --print @totalRecord
  Return @totalRecord ---返回记录总数
       
       
      End  
   
end

 

asp.net分页函数

 

 #region 获取分页的数据
        /// <summary>
        /// 获取分页的数据
        /// </summary>
        /// <param name="TblName">数据表名</param>
        /// <param name="Fields">要读取的字段</param>
        /// <param name="OrderField">排序字段</param>
        /// <param name="SqlWhere">查询条件</param>
        /// <param name="PageSize">每页显示多少条数据</param>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="TotalPage">返回值,共有多少页</param>
        /// <returns></returns>

        public static DataSet PageData(string TblName, string Fields, string OrderField, string SqlWhere, int PageSize, int pageIndex, out int TotalPage)
        {
          
            TotalPage = 1;
            DbObject db = new DbObject();

            string connString = db.ConnectionString;

            SqlConnection conn = new SqlConnection(connString);
            SqlCommand comm = new SqlCommand("Page", conn);

            comm.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100));
            comm.Parameters[0].Value = TblName;

            comm.Parameters.Add(new SqlParameter("@Fields", SqlDbType.NVarChar, 1000));
            comm.Parameters[1].Value = Fields;

            comm.Parameters.Add(new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000));
            comm.Parameters[2].Value = OrderField;

            comm.Parameters.Add(new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000));
            comm.Parameters[3].Value = SqlWhere;

            comm.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int));
            comm.Parameters[4].Value = PageSize;

            comm.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int));
            comm.Parameters[5].Value = pageIndex;


            comm.Parameters.Add(new SqlParameter("@TotalPage", SqlDbType.Int));
            comm.Parameters[6].Direction = ParameterDirection.Output;


            comm.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
            DataSet ds = new DataSet();
            dataAdapter.Fill(ds);
            TotalPage = (int)comm.Parameters[6].Value;          

            conn.Close();
            conn.Dispose();
            comm.Dispose();
            db.Dispose();
            return ds;
        }
        #endregion

 

 分页代码显示

 

 #region 分页代码显示
        /// <summary>
        /// 分页代码显示
        /// </summary>
        /// <param name="Url">跳转地址</param>
        /// <param name="TotleNum">总数据量</param>
        /// <param name="NumPerPage">每页显示多少条</param>
        /// <param name="Thepage"></param>
        /// <param name="ShowJump">是否显示跳转按钮</param>
        /// <param name="pagestyle">显示风格</param>
        /// <returns></returns>
        public static string PageStr(string Url, int TotleNum, int NumPerPage, int Thepage, bool ShowJump, int pagestyle)
        {
            string strTemp;
            int n;
            int p;
            int ii;
            if (Convert.ToInt32(TotleNum) <= Convert.ToInt32(NumPerPage))
                return "";
            Url = Url.Trim();
            if (Url != "")
                Url += "&";

            if (Convert.ToInt32(TotleNum) % Convert.ToInt32(NumPerPage) == 0)
            {
                n = TotleNum / NumPerPage;
            }
            else
            {
                n = TotleNum / NumPerPage + 1;
            }
            strTemp = "<table align=center  width=/"100%/"><tr><td align=/"center/">";

            strTemp += "共 " + TotleNum + " 条记录 页次:" + Thepage + "/" + n + "页 ";
            strTemp += NumPerPage + "条/页 ";

            if (Convert.ToInt32(pagestyle) == 1)
            {
                if (Convert.ToInt32(Thepage) < 2)
                    strTemp += "<font color=/"#999999/">首页 上页</font> ";
                else
                {
                    strTemp += "<a href=?" + Url + "page=1  class=/"link/">首页</a> ";
                    strTemp += "<a href=?" + Url + "page=" + (Thepage - 1) + "  class=/"link/">上页</a> "; ;
                }
                if (n - Convert.ToInt32(Thepage) < 1)
                {
                    strTemp += "<font color=/"#999999/">下页 尾页</font> ";
                }
                else
                {
                    strTemp += "<a href=?" + Url + "page=" + (Thepage + 1) + "  class=/"link/">下页</a> ";
                    strTemp += "<a href=?" + Url + "page=" + n + "  class=/"link/">尾页</a>  ";
                }
            }
            if (Convert.ToInt32(pagestyle) == 2)
            {
                if (Convert.ToInt32(Thepage) - 1 % 10 == 0)
                    p = (Thepage - 1) / 10;
                else
                    p = (Thepage - 1) / 10;

                if (p * 10 > 0)
                    strTemp += "<a href=?" + Url + "page=" + p * 10 + " title=上十页 >[&lt;&lt;]</a>   ";
                int uming_i = 1;
                for (ii = p * 10 + 1; ii <= p * 10 + 10; ii++)
                {
                    if (ii == Thepage)
                        strTemp += "<strong><font color=#ff0000>[" + ii + "]</font></strong> ";
                    else
                        strTemp += "<a href=?" + Url + "page=" + ii + ">[" + ii + "]</a> ";
                    if (ii == n)
                        break;
                    uming_i = uming_i + 1;
                }
                if (ii <= n && uming_i == 11)
                    strTemp += "<a href=?" + Url + "page=" + ii + " title=下十页>[&gt;&gt;]</a>  ";
            }

            if (ShowJump)
            {
                string guid = CreateCard(Guid.NewGuid().ToString());
                strTemp += "&nbsp;&nbsp;<script>function " + guid + "_a(){var " + guid + "_b=document.getElementById(/"" + guid + "_i/").value;var url=?"+ Url +"&page=+ "+ guid +"_b +;this.location.href=+ url +;}</script>转到:<input type=/"text/" name=/"" + guid + "_i/" id=/"" + guid + "_i/" style=/"width:20px;height:15px;/" /> 页&nbsp; <input name=/"pagebutton/" type=/"button/" value=/"跳转/" οnclick=/"return " + guid + "_a();/" />";
            }
            strTemp += "</td></tr></table>";
            return (string)strTemp;
        }
        #endregion

 

   #region 显示页面输入框
        /// <summary>
        /// 显示页面输入框
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private static string CreateCard(string str)
        {
            string card = str;
            for (int i = 0; i <= 9; i++)
            {
                card = card.Replace(i.ToString(), "").Replace("-", "").ToUpper();

            }        

            return card;


        }
        #endregion

 分页调用示例   


 

 

 #region 分页
            string TblName = tbl;
            string Fields = "id,gxmc,zymc,wc,fs,pc,bwlqrs,bzylqrs,bzyzgf,zgfwc,bzyzdf,zdfwc,pjf,cs,xnwc,pro";//读取的字段
            string OrderField = " fs desc";//排序
            string SqlWhere = "";//条件
            if (!string.IsNullOrEmpty(pc))
            {
                SqlWhere = " pc in(" + pc + ")";
            }

            int PageSize = 20; //分页大小
            int totalpage = 0;
            int pageIndex;
            string _page = "1";
            _page = Convert.ToString(Request.QueryString["page"]);
            if (string.IsNullOrEmpty(_page))
            {
                _page = "1";
            }
            else
            {
                _page = Fun.FilterSQL(_page);
            }
            if (_page == "0")
            {
                _page = "1";
            }
            pageIndex = Convert.ToInt32(_page);
            string pagestr= "";
            DataSet ds = GetPage.PageData(TblName, Fields, OrderField, SqlWhere, PageSize, pageIndex, out totalpage, conn2);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                string TR = " οnmοuseοver=/"this.style.background=#FFF9E8;/" οnmοuseοut=/"this.style.background=#FFFFFF;/"";

                if (i % 2 == 0)
                {

                    TR = " class=/"alter/" οnmοuseοver=/"this.style.background=#FFF9E8;/" οnmοuseοut=/"this.style.background=#EBF3FD;/"";
                }

                pagestr += "<tr " + TR + "><td> <input name=/"id/" value=/"" + ds.Tables[0].Rows[i]["id"].ToString() + "/" type=/"checkbox/" /></td><td>&nbsp;" + ds.Tables[0].Rows[i]["gxmc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zymc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["fs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["wc"].ToString() + "</td><td class=/"gray/" align=/"center/">" + setxnwc(ds.Tables[0].Rows[i]["xnwc"].ToString(), ds.Tables[0].Rows[i]["wc"].ToString(), ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td>&nbsp;" + setpc(ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bwlqrs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzylqrs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzyzgf"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zgfwc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzyzdf"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zdfwc"].ToString() + "</td><td>" + ds.Tables[0].Rows[i]["pjf"].ToString() + "</td>" + GetTblName(tbl, "<td>&nbsp;" + ds.Tables[0].Rows[i]["pro"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["cs"].ToString() + "</td>") + "<td><a href=/"#/" οnclick=/"Confirm1(真的要修改吗?,wj_add.aspx,id=" + ds.Tables[0].Rows[i]["id"].ToString() + ");return false;/">修改</a></td><td><a href=/"#/" οnclick=/"Confirm(真的要删除吗?,id=" + ds.Tables[0].Rows[i]["id"].ToString() + "&act=del);return false;/">删除</a></td></tr>";
            }
            ds.Clear();
            ds.Dispose();
          Page_list.Text = pagestr; //绑定分页数据

            this.PageStr.Text = GetPage.PageStr("tbl=" + tbl + "&title=" + title + "&subtitle=" + subtitle + "&pc=" + pc, totalpage, PageSize, pageIndex, true, 2);//绑定分页导航
            #endregion

 

http://www.opent.cn/a/2009/2/4/831.shtml



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值