上次在网上抄的oracle分页存储过程不好使--~!,只能主键排序
无奈我写不出那么复杂的存储过程。。。用程序凑吧o(∩_∩)o :
/// <summary>
/// 分页绑定
/// </summary>
/// <param name="table">表名</param>
/// <param name="where">要加载的条件</param>
/// <param name="column">查询的列,比如:*或者code,name</param>
/// <param name="order">排序字段,比如:code desc或者code asc</param>
/// <param name="mPageSize">每页大小</param>
/// <param name="mPageIndex">查询第几页</param>
/// <param name="recount">out形式参数,返回记录总数</param>
/// <returns>返回的是游标形式的数据集</returns>
public static DataSet PageBind(string table, string where, string column, string order, int mPageSize, int mPageIndex,out int recount)
{
StringBuilder sb = new StringBuilder(57);
sb.Append("select count(1) from " + table);
if (where.Length > 0)
{
sb.Append(" where " + where);
}
object _o = ExecuteSql_obj(sb.ToString());
recount = Convert.ToInt32(_o);
sb = new StringBuilder(500);
sb.Append(" select * from ( select temp_b.*,rownum rk from (select " + column + " from " + table);
if (where.Length > 0)
{
sb.Append(" where " + where);
}
if (order.Length > 0)
{
sb.Append(" order by " + order);
}
sb.Append(" ) temp_b where rownum<" + (mPageIndex * mPageSize + 1) + ") s where s.rk> " + mPageSize * (mPageIndex - 1));
DataSet ds = null;
ds = Query(sb.ToString());
return ds;
}
/// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <returns>DataSet</returns>
public static DataSet Query(string SQLString)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
OracleDataAdapter command = new OracleDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}