废话不多说,只说代码,及过程
?
1.创建存储过程
?
create procedure [dbo].[sp_PagingTabs]
@TableName nvarchar(200), /* 表名 */
@FieldName nvarchar(500), /* 要查询的字段 */
@where nvarchar(500), /* 查询的条件 */
@OrderField nvarchar(500), /* 排序指定的字段 */
@Order nvarchar(50), /* 排序 只能是 asc desc */
@PageIdORField nvarchar(50), /* 指定字段来分页 */
@PageSize int , /* 每页个数 */
@PageIndex int /* 当前页码 */
as
begin
/* 先清除字符串左右的空格 */
set @TableName = LTRIM(rtrim(@TableName));
set @FieldName = LTRIM(RTRIM(@FieldName));
set @where = LTRIM(RTRIM(@where));
set @Order = LTRIM(RTRIM(@Order));
set @OrderField=LTRIM(RTRIM(@OrderField));
set @PageIdORField =LTRIM(rtrim(@PageIdORField));
/* 然后对非空传值进行判断 */
if ISNULL(@TableName,'')='' return ;
if ISNULL(@FieldName,'')='' set @FieldName='*';
if ISNULL(@Order,'')='' set @Order = 'desc';
/* 查询分页的数据 */
declare @sql nvarchar(1000)
set @sql=' select top ' + cast(@PageSize as nvarchar(50)) + ' ' + @FieldName + ' from ' + @TableName + ' where 1=1' + @where
+ ' and ' + @PageIdORField + ' not in(select top ' + cast((@PageSize * (@PageIndex-1)) as nvarchar(50)) + @PageIdORField + ' from ' + @TableName + ' where 1=1 '+
@where + ' order by ' + @OrderField + ' ' + @Order+') order by ' + @OrderField + ' ' + @Order;
/* 总页数 */
set @sql+=' select count(*) from ' + @TableName + ' where 1=1 ' + @where
exec(@sql)
end
?
2.创建方法类
?
///
/// 分页存储过程
///
/// 表名
/// 字段名
/// where条件
/// 只能是desc or asc
/// 每页条数
/// 当前页码
/// 总页码
/// 指定字段来分页
/// 排序指定的字段
public static DataSet LinkProce(string TableName, string FieldName, string wheres, string order,string PageIdORField,string OrderField, ref int PageSize,ref int PageIndex)
{
using (SqlConnection conn = new SqlConnection(Conn.ConnString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "sp_PagingTabs";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@TableName", (TableName.Trim() == "User" ? "[User]" : TableName));
cmd.Parameters.AddWithValue("@FieldName", FieldName);
cmd.Parameters.AddWithValue("@where", wheres);
cmd.Parameters.AddWithValue("@Order", order);
cmd.Parameters.AddWithValue("@OrderField", OrderField);
cmd.Parameters.AddWithValue("@PageIdORField", PageIdORField);
cmd.Parameters.AddWithValue("@PageSize", PageSize);
cmd.Parameters.AddWithValue("@PageIndex", PageIndex);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
try
{
da.Fill(ds);
return ds;
}
catch
{
return null;
}
finally
{
ds.Dispose();
conn.Close();
}
}
}
}
?
3.调用方法
?
public DataSet LinkServer(string TableName, string FieldName, string wheres, string order,string PageIdORField,string OrderField, ref int PageSize, ref int PageIndex)
{
return SQLHelperMe.LinkProce(TableName, FieldName, wheres, order, PageIdORField, OrderField,ref PageSize,ref PageIndex);
}
?
4.正式使用
?
namespace Web.WebForm1
{
public partial class WebForm1 : System.Web.UI.Page
{
private int PageIndex = 0;
public DataTable list;
public string DivPager = "";
protected void Page_Load(object sender, EventArgs e)
{
GetParams();
showData();
}
private void GetParams()
{
if (!String.IsNullOrEmpty(Request["page"]))
{
PageIndex