/*
author:liqinag665
2007-04-13 pm
得到论坛贴子列表
并进行数据库分页
table_name为需要分页的表名
PID为表关键字段
board是表版面字段
boardID是版面参数
pagesize为每页记录数
pageno为页号
sortname为排序字段
*/
if exists(select name from sysobjects where name='get_bbs_art' and type='p')
drop procedure get_bbs_art
gocreate procedure get_bbs_art
@table_name varchar(50),
@board varchar(50),
@boardID int,
@PID varchar(20),
@pagesize int,
@pageno int,
@sortname varchar(50)
as
declare @str varchar(255)
set @str='select top '+convert(varchar,@pagesize)+' *  from ' +@table_name+' where '+@PID+ ' not in (select top '+convert(varchar,@pagesize*(@pageno-1))+' '+@PID+' from '+@table_name+' order by '+@sortname+ ' asc) and '+@board+'=' +convert(varchar,@boardID)+ ' order by '+@sortname+ ' asc' 
execute(@str)
可以返回一个页总数来进行判断!

解决方案 »

  1.   

    要看你用什么语言编程的,这是我做论坛时用到的两个方法.其实分页的总记录数与总页数完全可以在一个存储过程中实现.用out参数输出即可.表示层再用一个数据控件绑定BBSList返回的dataset.页数判断根据BBSList_Count    //得到论坛版块分页的当前页
        public DataSet BBSList(string TableName, string Board, int BoardID, string PID, int PageSize, int PageNo, string SortName)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
            SqlDataAdapter da = new SqlDataAdapter("current_bbs_art", cn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.Add("@table_name", SqlDbType.VarChar, 50).Value = TableName;
            da.SelectCommand.Parameters.Add("@board", SqlDbType.VarChar, 50).Value = Board;
            da.SelectCommand.Parameters.Add("@boardID", SqlDbType.Int).Value = BoardID;
            da.SelectCommand.Parameters.Add("@PID", SqlDbType.VarChar, 20).Value = PID;
            da.SelectCommand.Parameters.Add("@pagesize", SqlDbType.Int).Value = PageSize;
            da.SelectCommand.Parameters.Add("@pageno", SqlDbType.Int).Value = PageNo;
            da.SelectCommand.Parameters.Add("@sortname", SqlDbType.VarChar, 50).Value = SortName;
            DataSet ds = new DataSet();
            da.Fill(ds);
            cn.Close();
            da.Dispose();
            return ds;
        }    //得到论坛版块或者帖子内容分页的总记录数与总页数
        public SqlDataReader BBSList_Count(string TableName, int PageSize, string Conditions)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
            cn.Open();
            SqlCommand cm = new SqlCommand("eval_total", cn);
            cm.CommandType = CommandType.StoredProcedure;
            cm.Parameters.Add("@table_name", SqlDbType.VarChar, 50).Value = TableName;
            cm.Parameters.Add("@pagesize", SqlDbType.Int).Value = PageSize;
            cm.Parameters.Add("@conditions", SqlDbType.VarChar).Value = Conditions;
            SqlDataReader dr = cm.ExecuteReader();
            return dr;
        }