代码和存储过程是针对AspNetPager。其中,使用环境为:VS2005 + sqlserver2005。
CS代码如下:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
this class is for visual studio 2005 only
*/
using System;
using System.Text;
using System.Data;
using System.Data.SqlClient;
![](/Images/OutliningIndicators/None.gif)
public class Pager
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
private static readonly string selectSqlTp = "select * from( select [columns], row_number() over([orderby]) as __row__ from [table] [where])t where t.__row__ >= [low] and t.__row__ <= [high]";
private static readonly string selectTotalTp = "select count(*) from [table] [where]";
// 排序后,每个页面的内容项会变
public static DataTable getTable(string table, string columns, string where,string orderby, string ascDesc, int pageIndex, int pageCount, ref int total)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string selectSql = getSelectSql(table, columns, where, orderby, ascDesc, pageIndex, pageCount);
string totalSql = getTotalSql(table, where);
System.Data.DataTable dt = new System.Data.DataTable();
SqlConnection conn = new SqlConnection("[replaceConnectionString]");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "up_pager";
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
SqlParameter []paras =
{new SqlParameter("@select_total_sql", totalSql),
new SqlParameter("@select_sql", selectSql),
new SqlParameter("@total", SqlDataType.Int)};
paras[2].Direction = ParameterDirection.Output;
cmd.Parameters.AddRange(paras);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
conn.Open();
SqlDataReader dr = cmd.ExcuteReader();
if(dt.HasRows)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
dt.Load(dr);
total = (int)paras[2].Value;
}
}
catch(Exception ex)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
throw ex;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(conn.Status == ConnectionStatus.Open)
conn.Close();
cmd.Parameters.Clear();
}
return dt;
}
private static string getSelectSql(string table, string columns, string where,string orderby, string ascDesc, int pageIndex, int pageCount)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
System.Text.StringBuilder sbSelect = new System.Text.StringBuilder(selectSqlTp);
sbSelect.Replace("[table]", table);
sbSelect.Replace("[columns]", columns);
if(where == null || where == "")
sbSelect.Replace("[where]", "where 1=1");
else sbSelect.Replace("[where]", where);
string order = "order by " + orderby;
if(ascDesc != null && ascDesc !="")
order += " "+ascDesc;
sbSelect.Replace("[orderby]", order);
int low = (int)(pageIndex * pageCount);
int high = (int)((pageIndex + 1) * pageCount);
sbSelect.Replace("[low]", "" + low);
sbSelect.Replace("[high]", "" + high);
return sbSelect.ToString();
}
private static string getSelectTotal(string table, string where)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
System.Text.StringBuilder sbTotal = new System.Text.StringBuilder(selectTotalTp);
sbTotal.Replace("[table]", table);
if(where == null)
where = "where 1=1";
sbTotal.Replace("[where]", where);
return sbTotal.ToString();
}
}
下面是存储过程,很简单:
-- the pager procedure
-- zyl
-- version: 2.0
CREATE PROCEDURE up_pager
@select_total_sql nvarchar(1000),
@select_sql nvarchar(2000),
@total int output
as
exec sp_executesql @select_sql
exec @total = sp_executesql @select_total_sql
return @@rowcount
![](/Images/OutliningIndicators/None.gif)
GO
![](/Images/OutliningIndicators/None.gif)
上面的代码是参照一位师兄的代码写的,在此表示感谢。