.NET+Oracle 分页
http://www.cnblogs.com/Jusoc/archive/2011/08/28/2156530.html#commentform 、在oracle的sqlplus或其他工具中运行一下pl/sql块建立存储过程 ------------------------------------------------------------
--分页存储过程
------------------------------------------------------------
--创建包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
/ --创建过程
create or replace procedure fenye
(
tableName in varchar2, --表名
fields in varchar2, --查询解果显示字段
wherecase in varchar2, --查询条件
pageSize in number, --一页显示记录数
pageNow in number, --当前页
orderField varchar2, --排序字段,为空表示不排序
orderFlag number, --排序标识 :正序 :倒序
myrows out number, --总记录数
myPageCount out number, --总分页
p_cursor out testpackage.test_cursor --返回的记录集
) is
--定义部分
--定义sql语句字符串
v_sql varchar2();
--定义两个整数
v_begin number:=(pageNow-)*pagesize+; --开始记录
v_end number:=pageNow*pageSize; --结束记录
--排序sql
v_orderSql varchar2():='';
v_wherecase varchar2():='';
begin
--执行部分
--如果orderField不为空,则进行排序,如果orderFlag=0为升序,1为降序
if orderField is not null then
if orderFlag= then
v_orderSql:=' order by '||orderField;
elsif orderFlag= then
v_orderSql:=' order by '||orderField||' desc';
else
null;
end if;
end if;
--条件判断语句
if wherecase is not null then
v_wherecase:=' where '||wherecase;
end if;
v_sql:='select * from
(select t1.* ,rownum rn from(select '|| fields ||' from '|| tableName|| v_wherecase ||' '||v_orderSql ||') t1 where rownum<='|| v_end ||')
where rn>='|| v_begin;
--把游标和sql关联
open p_cursor for v_sql;
--计算myrows和myPageCount
--组织一个sql
v_sql:='select count(*) from '|| tableName || v_wherecase || ' ' ||v_orderSql;
--执行sql,并把返回的值赋给myrows;
execute immediate v_sql into myrows;
--计算myPageCount
if mod(myrows,Pagesize)= then
myPageCount:=myrows/Pagesize;
else
myPageCount:=myrows/pagesize+;
end if;
--关闭游标
--close p_cursor;
end;
/ 、.net中的oracle过程调用类 /// <summary>
/// c#调用oracle的过程进行分页/// </summary>
public class Paging
{
private string _connectionString;
private string _tableName;
private string _fields = "*";
private string _whercase="";
private int _pageSize=;
private int _pageNow=;
private string _orderField="";
private int _orderFlag = ;
private int _myRows;
private int _myPageCount;
private DataTable _result; /// <summary>
/// 数据库连接字符串
/// </summary>
public string ConnectionString
{
get { return _connectionString; }
set { _connectionString = value; }
} /// <summary>
/// 表名
/// </summary>
public string TableName
{
get { return _tableName; }
set { _tableName = value; }
}
/// <summary>
/// 查询结果显示字段
/// </summary>
public string Fields
{
get { return _fields; }
set { _fields = value; }
}
/// <summary>
/// 查询条件
/// </summary>
public string Whercase
{
get { return _whercase; }
set { _whercase = value; }
}
/// <summary>
/// 页显示记录数
/// </summary>
public int PageSize
{
get { return _pageSize; }
set { _pageSize = value; }
}
/// <summary>
/// 当前页
/// </summary>
public int PageNow
{
get { return _pageNow; }
set { _pageNow = value; }
}
/// <summary>
/// 排序字段,为空""表示不排序
/// </summary>
public string OrderField
{
get { return _orderField; }
set { _orderField = value; }
}
/// <summary>
/// 排序标识 0:正序 1:倒序
/// </summary>
public int OrderFlag
{
get { return _orderFlag; }
set { _orderFlag = value; }
}
/// <summary>
/// 总记录数
/// </summary>
public int MyRows
{
get { return _myRows; }
}
/// <summary>
/// 总分页
/// </summary>
public int MyPageCount
{
get { return _myPageCount; }
}
/// <summary>
/// 返回的记录集
/// </summary>
public DataTable Result
{
get { return _result; }
} public Paging()
{
fenye();
} public Paging(string connectionString,string tableName, string fields, string wherecase, int pageSize, int pageNow, string orderField, int orderFlag, out int myRows, out int myPageCount, out DataTable result)
{
_connectionString = connectionString;
_tableName = tableName;
_fields = fields;
_whercase = wherecase;
_pageSize = pageSize;
_pageNow = pageNow;
_orderField = orderField;
_orderFlag = orderFlag; fenye();
myRows = _myRows;
myPageCount = _myPageCount;
result = _result; } private void fenye()
{
OracleConnection conn = new OracleConnection(_connectionString);
conn.Open(); try
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure; //调用存储过程查询数据
cmd.CommandText = "fenye";
OracleParameter[] parameters = new OracleParameter[];
//注意这里的参数名和类型号与存储过程里面的一样
parameters[] = new OracleParameter("tableName", OracleType.VarChar);
parameters[] = new OracleParameter("fields", OracleType.VarChar);
parameters[] = new OracleParameter("wherecase", OracleType.VarChar);
parameters[] = new OracleParameter("pageSize", OracleType.Int32);
parameters[] = new OracleParameter("pageNow", OracleType.Int32);
parameters[] = new OracleParameter("orderField", OracleType.VarChar);
parameters[] = new OracleParameter("orderFlag", OracleType.Int32);
parameters[] = new OracleParameter("myrows", OracleType.Int32);
parameters[] = new OracleParameter("myPageCount", OracleType.Int32);
parameters[] = new OracleParameter("p_cursor", OracleType.Cursor); parameters[].Value = _tableName;
parameters[].Value = _fields;
parameters[].Value = _whercase;
parameters[].Value = _pageSize;
parameters[].Value = _pageNow;
parameters[].Value = _orderField;
parameters[].Value = _orderFlag;
parameters[].Direction = ParameterDirection.Output;
parameters[].Direction = ParameterDirection.Output;
parameters[].Direction = ParameterDirection.Output; foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
//执行命令
OracleDataAdapter oda = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
oda.Fill(ds);
//得到查询结果表
_result = ds.Tables[]; //取出总行数
_myRows = Convert.ToInt32(parameters[].Value);
//取出总页数
_myPageCount = Convert.ToInt32(parameters[].Value.ToString()); }
catch (Exception ex)
{ throw;
}
finally
{
conn.Close();
} } }
.NET+Oracle 分页的更多相关文章
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- Oracle 分页原理
oracle rownum 及分页处理的使用方法 在实际应用中我们经常碰到这样的问题,比如一张表比较大,我们只要其中的查看其中的前几条数据,或者对分页处理数据.在这些情况下我们都需要用到rownum. ...
- Sqlserver2008和Oracle分页语句
SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...
- mysql和oracle 分页查询(转)
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- 说说oracle分页的sql语句
说说oracle分页的sql语句,分排序和不排序两种. 当结果集不需要进行排序时,每页显示条数为:rowPerPage,当前页数为:currentPage. 1. 相对来说,这种查询速度会快一些,因为 ...
- PHP oracle分页
oracle分页 function getall($query, $start=0, $rows=-1) { $this->dbh = oci_connect('aaa','mmm'," ...
- Oracle分页查询语句的写法(转)
Oracle分页查询语句的写法(转) 分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. Oracle分页查询语句使我们最常用的 ...
- oracle分页与rownum
Oracle分页(limit方式的运用) Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数. 第一种 select * from a_matr ...
- Oracle 分页方法研究
1.Oracle 中的三大分页方法 1.1.通过分析函数分页 1.2.通过 ROWNUM 分页 1.3.通过 ROWID 分页 2.Oracle 分页解决方案浅析 2.1.纯后端代码完成分页 2.2. ...
- MySQL oracle 分页
(1)MySql的Limit m,n语句 Limit后的两个参数中,参数m是起始下标,它从0开始:参数n是返回的记录数.我们需要分页的话指定这两个值即可. 比如:查询10行记录,起始行从3开始 SEL ...
随机推荐
- 【转】Html标签大全
Html标签大全 2013-07-05 18:22:33 分类: Python/Ruby Html标签大全 <a></a> 超文本链接 <a href="UR ...
- LevelDB windows vs2013 c++编译和测试
引用: (src1) :http://download.csdn.net/detail/flyfish1986/8881263(这里有下载地址) (src2) :http://blog.csdn.ne ...
- 09_Mybatis开发Dao方法——mapper代理开发规范
一.开发规范 需要编写mapper.xml映射文件(本项目为userMapper.xml,类似于前面的user.xml). 编写mapper接口需要遵循一些开发规范,这样MyBatis可以自动生成ma ...
- C++指针学习笔记
本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php 1.存储其它变量地址的变量(如下面例子中的addre ...
- 实体框架(Entity Framework)简介
实体框架(Entity Framework)简介 简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R ...
- Lambda Expression In Java
题记在阅读JDK源码java.util.Collections的时候在UnmodifiableCollection类中看到了这么一段代码: public void forEach(Consumer& ...
- TDirectory.Copy复制文件
描述:复制文件夹以及文件夹下的内容 procedure Copy(const SourceDirName, DestDirName: string) 参数一:源文件夹 参数二:目标文件夹 所在单元:S ...
- Emmet Documentation
src:http://docs.emmet.io/cheat-sheet/ Emmet Documentation Syntax Child: > nav>ul>li <n ...
- MOS管应用之放反接电路
一.典型电路 1.电路1 说明: GND-IN 为电源接口的负极 GND 为内部电路的公共地 原理分析 正向接: VCC-IN通过R1.R2.MOS体二极管,最后回到GND-IN;然后GS电压升高,紧 ...
- 浅谈JavaScript的push()函数
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度.返回值是把指定的值添加到数组后的新长度. 语法:arrayObject.push(newelement1,newelement2,. ...