CREATE PROCEDURE [dbo].[TopPageList]
@strTable varchar(200), --表名 ("@strTable", "myUser");
@strColumn varchar(50), --按该列来进行分页 ("@strColumn", "UserId");
@strOrderColumn varchar(50), --排序字段order by XXX desc
@intOrder int,--排序的顺序 0 升序 1降序
@strColumnlist varchar(150) , --要查询出的字段列表,*表示全部字段 cmd.Parameters.Add("@strColumnlist", "*");
@strWhere varchar(800)='', --查询条件 cmd.Parameters.Add("@strWhere", "");
@intPageSize int, --每页记录数 cmd.Parameters.Add("@intPageSize", 15);
@intPageNum int, --指定页 cmd.Parameters.Add("@intPageNum", 5);
-- @intPageCount int OUTPUT , --总页数 SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
-- paramPageCount.Direction = ParameterDirection.Output;
@itemCount int OUTPUT
-- @doCount bit = 0, -- 返回, 非值则返回记录总数
AS
--设置相应的空格
--设置DESC ASC
if @intOrder=0 --0升序
set @strOrderColumn=' order by '+@strOrderColumn
else --降序
set @strOrderColumn=' order by '+@strOrderColumn +' desc '
DECLARE @sql nvarchar(2000) --用于构造SQL语句
DECLARE @where1 varchar(800) --构造条件语句
DECLARE @where2 varchar(800) --构造条件语句
IF @strWhere is null or rtrim(@strWhere)=''
-- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格
BEGIN --没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN --有查询条件
SET @where1=' WHERE ('+@strWhere+') AND '
SET @where2=' WHERE ('+@strWhere+') '
END
------构造SQL语句,计算总页数。计算公式为总页数= Ceiling ( 记录个数/ 页大小)
--计算总项数
SET @sql='SELECT @itemCount=COUNT('+@strColumn+') from '+@strTable +@where2
print(@sql)
EXEC sp_executesql @sql,N'@itemCount int OUTPUT',@itemCount OUTPUT
-- 1:直接计算 2:自己写个分页控件里面设置一下也可以~!
-- set @intPageCount =floor(cast(@itemCount as float)/@intPageSize)
-- if @intPageCount
--
--执行SQL语句,计算总页数,并将其放入@intPageCount变量中
--将总页数放到查询返回记录集的第一个字段前,此语句可省略
SET @strColumnlist=' '+ Cast(@itemCount as varchar(30)) + ' as itemCount,' +' '+ @strColumnlist
--+ Cast(@intPageCount as varchar(30)) + ' as PageCount,'
SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + @strColumnlist +
' FROM ' + @strTable + @where1 + ' '+
@strColumn + ' not in '+
' (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + ' ' +
@strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+') ' + @strOrderColumn
print(@sql)
--ELSE
-- begin --构造降序的SQL ---针对2个表的时候会出现聚合函数的异常--适合单个表格的数据库分页操作
-- SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + @strColumnlist +
-- ' FROM ' + @strTable + @where1 + ' '+
-- @strColumn + '<(SELECT MIN('+@strColumn+') '+
-- ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + ' ' +
-- @strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+') as tblTmp)' + @strOrderColumn
-- print(@sql)
-- end
IF @intPageNum=1--第一页
SET @sql='SELECT TOP '+CAST(@intPageSize AS varchar) + @strColumnlist + ' FROM '+@strTable+
@where2+@strOrderColumn
--END
--PRINT @sql
print(@sql)
exec(@sql)
public static void BindingContent(string strTable, string strColumn, string strOrderColumn, int intOrder, string strColumnlist, string strWhere, IChangePageStored changePage)
{
SqlParameter[] paras=new SqlParameter[9];
paras[0] = new SqlParameter("@strTable" ,SqlDbType.VarChar);
paras[0].Value = strTable;
paras[1] = new SqlParameter("@strColumn", SqlDbType.VarChar);
paras[1].Value = strColumn;
paras[2] = new SqlParameter("@strOrderColumn", SqlDbType.VarChar);
paras[2].Value = strOrderColumn;
paras[3] = new SqlParameter("@strColumnlist", SqlDbType.VarChar);
paras[3].Value = strColumnlist;
paras[4] = new SqlParameter("@intOrder", SqlDbType.Int);
paras[4].Value = intOrder;
paras[5] = new SqlParameter("@strWhere", SqlDbType.VarChar);
paras[5].Value = strWhere;
paras[6] = new SqlParameter("@intPageSize", SqlDbType.Int);
paras[6].Value = changePage.PageSize;
paras[7] = new SqlParameter("@intPageNum", SqlDbType.Int);
paras[7].Value = changePage.CurrentPage ;
// paras[8] = new SqlParameter("@intPageCount", SqlDbType.Int);
// paras[8].Direction = ParameterDirection.Output;
paras[8] = new SqlParameter("@itemCount", SqlDbType.Int);
paras[8].Direction = ParameterDirection.Output;
DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "TopPageList", paras);
/* @intPageCount int OUTPUT , --总页数 SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
-- paramPageCount.Direction = ParameterDirection.Output;
@strTable = N'zhq_in_content c INNER JOIN zhp_in_columns m ON c.columns_id=m.columns_id',
@strColumn = N'c.content_id',
@strOrderColumn = N'c.createdate',
@intOrder = 1,
@strColumnlist = N'*',
@strWhere = N'c.status=0 AND c.del=0',
@intPageSize = 20,
@intPageNum =100,*/
changePage.DataSource = ds.Tables[0].DefaultView;// 设置分页控件的数据
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
changePage.RecordCount = int.Parse(ds.Tables[0].Rows[0]["itemCount"].ToString());
// changePage.PageCount = int.Parse(ds.Tables[0].Rows[0]["PageCount"].ToString());
}
if (changePage.DataUI.GetType().BaseType.Name == "BaseDataList")
{
changePage.DataUI.DataSource = changePage.DataSource;//设置数据源控件的数据
changePage.DataUI.DataBind();
}
}