/*判断页数是否正确*/ if (@intPageNo - 1) * @intPageSize > @RecordCount --页号大于总页数,返回错误 return (-1) set nocount off--打开计数 if @SelectWhere != '' begin set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectWhere +' '+@SelectOrder+') and '+@SelectWhere +' '+@SelectOrder end else begin set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectOrder+') '+@SelectOrder end execute sp_executesql @TmpSelect return(@@rowcount) GO
其实代码也很简单,学编程的人基本上都是懂数据库的,这个存储过程估计不是问题。 其他的代码我都做了解释,有颜色的那段我没有解释,我在这里解释一下。其实也很简单,大家来看: select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectWhere +' '+@SelectOrder+' 这段代码的执行结果是什么了,是不是当前页前面的主键的集合啊,现在我们从所有的表中选出主键的值不在这个结果的之内的pagesize个记录不就是当前页的内容了吗? 2.aspx页面就不用再将了吧?我这里将代码写上:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {
this.bind();
}
protected void link_Click(object sender, EventArgs e) { int page = Convert.ToInt32(txtlink.Text); Response.Redirect("aa.aspx?CurrentPage="+page+""); } public void bind() { int sumPage; int pageNo = 1; int pageSize = 3; if (Request.QueryString["CurrentPage"] == null) { pageNo = 1; } else { pageNo = Int32.Parse(Request.QueryString["CurrentPage"]); }