代码改变世界

c#下oracle分页方法

2010-04-16 13:49  cnb_mtime  阅读(537)  评论(0)    收藏  举报

上次在网上抄的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;
}
}