日常数据库读取经常要分页显示,使用数据绑定的方法只能用在DG之类的重型控件中,对于定制控件,通常要使用分页sql。以下记录两种:

方式一:拼接SQL

 public DataTable SpacePhotosList(int pageSize, int currentPage, int userid, int albumid)
        {
            //try
            //{
            //"userid=" + userid + " AND albumid=" + albumid
            DbParameter[] prams =
    {
     DbHelper.MakeInParam("@userid", (DbType)SqlDbType.Int, 4,userid),
     DbHelper.MakeInParam("@albumid", (DbType)SqlDbType.Int, 4,albumid)
    };
            int pageTop = (currentPage - 1) * pageSize;
            string sql = "";
            if (currentPage == 1)
            {
                sql = "SELECT TOP " + pageSize.ToString() + " * FROM "
                    + "[" + BaseConfigs.GetTablePrefix + "photos] WHERE [userid]=@userid AND [albumid]=@albumid ORDER BY [photoid] ASC";
            }
            else
            {
                sql = "SELECT TOP " + pageSize.ToString() + " * FROM "
                    + "[" + BaseConfigs.GetTablePrefix + "photos] WHERE [photoid] > (SELECT MAX([photoid])  FROM "
                    + "(SELECT TOP " + pageTop + " [photoid] FROM [" + BaseConfigs.GetTablePrefix + "photos] WHERE "
                    + "[userid]=@userid AND [albumid]=@albumid ORDER BY [photoid] ASC) AS tblTmp ) AND [userid]=@userid "
                    + "AND [albumid]=@albumid ORDER BY [photoid] ASC";
            }
            return DbHelper.ExecuteDataset(CommandType.Text, sql, prams).Tables[0];
            //}
            //catch
            //{
            //    return new DataTable();
            //}
        }

 

方式二:存储过程

 public DataTable GetSpacePhotoListByAlbumId(int albumId, int pageIndex, int pageSize, out int totalRecords)
        {
            string sqlStr = string.Format("select * from {0}photos where albumid={1}", TablePrefix, albumId);
            string orderby = "postdate desc";
            int rc = 0;
            DataTable dt = DbHelper.GetPageDataTable(pageSize, pageIndex, sqlStr, orderby, ref rc);
            totalRecords = rc;
            return dt;
        }

 

#region 分页处理

        /// <summary>

        /// 分页GetPage(10,1,"select * from table","id desc");

        /// </summary>

        /// <param name="pagesize">页面大小</param>

        /// <param name="curpageindex">当前页,从开始</param>

        /// <param name="select">要进行分页的查询语句</param>

        /// <param name="orderby">需要进行排序的列</param>

        /// <returns>分页后的表,用DataTable的形式</returns>

        public DataTable GetPageDataTable(int pagesize,int curpageindex,string select,string orderby)

        {

            DbParameter[] parms = {

                DbHelper.MakeInParam("@select",DbType.String,300,select.Trim()),

                DbHelper.MakeInParam("@pagesize",DbType.Int32,4,pagesize),

                DbHelper.MakeInParam("@currentpageindex",DbType.Int32,4,curpageindex),

                DbHelper.MakeInParam("@orderby",DbType.String,200,orderby.Trim())

            };

            return ExecuteDataset(CommandType.StoredProcedure, "dnt_getpage", parms).Tables[0];

 

        }

 

        /// <summary>

        /// 分页如:GetPage(10,1,"select * from table","id desc");

        /// </summary>

        /// <param name="pagesize">页面大小</param>

        /// <param name="curpageindex">当前页,从开始</param>

        /// <param name="select">要进行分页的查询语句</param>

        /// <param name="orderby">需要进行排序的列</param>

        /// <returns>分页后的表,用DataReader的形式</returns>

        public DbDataReader GetPageReader(int pagesize,int curpageindex, string select, string orderby )

        {

            DbParameter[] parms = {

                DbHelper.MakeInParam("@select",DbType.String,300,select.Trim()),

                DbHelper.MakeInParam("@pagesize",DbType.Int32,4,pagesize),

                DbHelper.MakeInParam("@currentpageindex",DbType.Int32,4,curpageindex),

                DbHelper.MakeInParam("@orderby",DbType.String,200,orderby.Trim())

            };

            return ExecuteReader(CommandType.StoredProcedure, "dnt_getpage", parms);

        }

 

#endregion

 

 

存储过程:

Create PROC dnt_getpage

(

    @select varchar(200),

    @pagesize int,

    @currentpageindex int,

    @orderby varchar(200)

)

as

declare @start int;

declare @end int;

declare @sql varchar(500);

set @start=@pagesize * (@currentpageindex - 1) + 1;

set @end= @pagesize * @currentpageindex;

set @select=Stuff(@select,1,6,'select row_number() over(order by '+@orderby+') as rownum,');

set @sql='with tmp as ('+@select+') select * from TMP WHERE rownum>='+cast(@start as varchar(10))+' and rownum<='+cast(@end as varchar(10))

 

exec (@sql)

return

Posted on 2008-12-15 09:59  曹岳  阅读(458)  评论(0编辑  收藏  举报