代码是针对于AspNetPager写的。环境为oracle+VS2005
代码如下:
using System;
using System.Text;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Data;
using System.Collections;

namespace Manager.Common


{

/**//// <summary>
/// Pager 分页
/// zyl
/// version: 2.0
/// </summary>
public class Pager

{
public Pager()

{
//
}


分页函数模板, 我的代码,别动#region 分页函数模板, 我的代码,别动
private static readonly string pagerTemplate = "select s.* from (select rownum as row_num, t.* from ([select] [order])t)s where s.row_num>=[start] and s.row_num <=[end]";
private static readonly string selectTemplate = "select [field_list] from [table] [where] ";
private static readonly string totalTemplate = " select count(*) from [table] [where] ";
public static string connectionString = "";

public static DataTable getResult(string table, string fieldList, string where, int startIndex, int size)

{
int total = 0;
return getResult(table, fieldList, where,"", "", startIndex, size, ref total);
}
public static DataTable getResult(string table, string fieldList, string where, int startIndex, int size, ref int total)

{
return getResult(table, fieldList, where,"", "", startIndex, size, ref total);
}
public static DataTable getResult(string table, string fieldList, string where, string orderBy, string AscDesc, int startIndex, int size)

{
int total = 0;
return getResult(table, fieldList, where,orderBy, AscDesc, startIndex, size, ref total);
}

/**//// <summary>
/// 分页的函数
/// zyl 2006-6-6
/// </summary>
/// <param name="table">要选择的表或视图名</param>
/// <param name="fileList">字段列表,用逗号隔开,最后不应该是逗号,至少要有一个值,*也可以</param>
/// <param name="where">查询条件,注意一定要带上关键字:where</param>
/// <param name="orderBy">排序的字段,不要带 order by. 可为空,若为空,则表示不排序</param>
/// <param name="AscDesc">排序方式,其中:ASC表示升序,DESC表示降序(ASC与DESC大小写无所谓)</param>
/// <param name="startIndex">开始位置</param>
/// <param name="endIndex">一页的大小</param>
/// <param name="total">返回符号条件的记录总种条数,不是分页后的总条数</param>
/// <returns>你想要的列表</returns>
public static DataTable getResult(string table, string fieldList, string where, string orderBy, string AscDesc, int startIndex, int size, ref int total)

{
// ArrayList arr = new ArrayList();
DataTable dt = new DataTable();
try

{
string pagerSql = "", totalSql = "";
// 得到sql语句
getSqlString( table, fieldList, where, orderBy, AscDesc, startIndex, size, ref pagerSql, ref totalSql);
OracleConnection conn = new OracleConnection("ConnectionString");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "p_pager";
cmd.CommandType = CommandType.StoredProcedure;


OracleParameter []paras =
{new OracleParameter("select_total_sql", OracleDbType.Varchar2),
new OracleParameter("pager_sql", OracleDbType.Varchar2),
new OracleParameter("total", OracleDbType.Decimal),
new OracleParameter("cur", OracleDbType.RefCursor)};

paras[0].Value = totalSql;
paras[1].Value = pagerSql;
paras[2].Direction = ParameterDirection.Output;
paras[3].Direction = ParameterDirection.Output;

cmd.Parameters.Add(paras[0]);
cmd.Parameters.Add(paras[1]);
cmd.Parameters.Add(paras[2]);
cmd.Parameters.Add(paras[3]);

conn.Open();
cmd.ExecuteNonQuery();

// 取值
total = (int)(((OracleDecimal)paras[2].Value).Value);
OracleDataReader reader = (OracleDataReader)((OracleRefCursor)(paras[3].Value)).GetDataReader();
dt.Load(reader);
cmd.Parameters.Clear();
}
catch(Exception e)

{
Console.WriteLine(e.ToString());
}
return arr;
}
private static void getSqlString(string table, string fieldList, string where, string orderBy, string AscDesc, int startIndex, int size, ref string pagerSql, ref string totalSql)

{
if(startIndex <= 0)
startIndex = 1;

StringBuilder sbPager = new StringBuilder(pagerTemplate);
StringBuilder sbSelect = new StringBuilder(selectTemplate);
StringBuilder sbTotal = new StringBuilder(totalTemplate);

// 单个 select
sbSelect.Replace("[field_list]", fieldList);
sbSelect.Replace("[where]", where);
sbSelect.Replace("[table]", table);

// 分页 pager
sbPager.Replace("[select]",sbSelect.ToString());
sbPager.Replace("[start]",((startIndex-1) * size).ToString());
sbPager.Replace("[end]",((startIndex)*size).ToString());
if(orderBy.Trim() == "")

{
sbPager.Replace("[order]","");
}
else

{
string order = " order by "+orderBy;
if(AscDesc.Trim() == "")
order += " DESC ";
else order = order + " " + AscDesc;
sbPager.Replace("[order]",order);
}
// 总数
sbTotal.Replace("[table]", table);
sbTotal.Replace("[where]", where);

pagerSql = sbPager.ToString();
totalSql = sbTotal.ToString();
}
#endregion


}
}

下面是存储过程
-- 通用的分页过程
-- zyl
-- 2006-6-6
create or replace procedure p_pager
(
select_total_sql varchar2, -- 用以结果的查询的语句
pager_sql varchar2, -- 用以分页语句
total out number, -- 查询得出的总条数
cur out sys_refcursor -- 返回结果集
)is
cur_tmp sys_refcursor;
begin
open cur_tmp for select_total_sql;
fetch cur_tmp into total;
close cur_tmp;
open cur for pager_sql;
end;
