直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库

端存储过程PLSQL代码.

//    程序调用示例:

// int totalrows = 0;     //总记录数
//    int totalpages = 0;   //总页数

// string tableName ="temp"; //Oracle表名

// int pagesize =5;  //每页记录数

// int indexnowpage =2;  //当前页码

//    String strConnection = "DataSource =temp;User ID =system; Password=admin"; //连接字符串

//    OracleConnection pOrclConnection = new OracleConnection(strConnection);
//    Pagination pPagintion = new Pagination("sp_cur2", pOrclConnection);   //sp_cur2为储存过程名称
//    DataTable datatable = pPagintion.Paging(tablename, pagesize, indexnowpage, ref totalrows, ref

totalpages);

#region -------------------------------------------------------Oracle端分页存储过程--------------------

--------------------------------

#region 包p_pak1
//CREATE OR REPLACE PACKAGE p_pak1 AS TYPE p_cur1 IS REF CURSOR;
//END p_pak1;
#endregion

#region 存储过程sp_pro2
//CREATE OR REPLACE PROCEDURE sp_cur2
//                                 (rowcountPerPage NUMBER,  --每页面记录条数
//                                  indexNowPage NUMBER,       --当前页码
//                                  tabName VARCHAR2,             --分页表名
//                                  totalRows OUT NUMBER,        --总记录数
//                                  totalPages OUT NUMBER,        --总页数
//                                  p_cursor OUT p_pak1.p_cur1     --游标,用于返回结果集
//                                  ) IS

//     --分页起始记录编号
//    v_startRowNum NUMBER:= (indexNowPage-1)*rowcountPerPage+1;
//     --分页结束记录编号
//    v_endRowNum NUMBER:= indexNowPage*rowcountPerpage;

//    v_sql VARCHAR2(1000);

//    BEGIN
//         --分页查询核心Sql
//         v_sql:='SELECT * FROM (SELECT t1.*,ROWNUM rn FROM
//                     (SELECT * FROM '||tabName||')t1 WHERE ROWNUM<='||v_endRowNum||') WHERE

rn>='||v_startrowNum;

//         --打开游标,关联Sql语句
//         OPEN p_cursor FOR v_sql;

//         --查询记录总数
//         v_sql:='SELECT COUNT(*) FROM '||tabName;
//         EXECUTE IMMEDIATE v_sql INTO  totalRows;

//         --计算总页数
//         IF MOD(totalRows,rowcountPerPage)=0
//         THEN
//         totalPages:=totalRows/rowcountperPage;
//         ELSE
//         totalpages:=totalRows/rowcountperPage+1;
//         END IF;

//         --关闭游标,执行时报溢出错误
//         --CLOSE p_cursor;

//         END;

#endregion

#endregion
using System;
using System.Collections.Generic;
using System.Web;
using System.Data.OracleClient;
using System.Data;

/// <summary>
///调用Oracle存储过程对表进行分页
/// </summary>
public class Pagination
{
   
    string m_procedureName;//要调用的存储过程名称
    OracleConnection m_oracleConnection; //Oracle连接对象

/// <summary>
    /// 构造函数,传入存储过程名称与连接对象
    /// </summary>
    /// <param name="procedureName">存储过程名称</param>
    /// <param name="orclConnection">初始化后连接字符串的Oracle连接对象</param>
 public Pagination(string procedureName,OracleConnection orclConnection)
 {
        m_procedureName = procedureName;
        m_oracleConnection = orclConnection;
 }
   
    /// <summary>
    /// 执行分页
    /// </summary>
    /// <param name="tableName">需分页表名</param>
    /// <param name="paeSize">每页记录数</param>
    /// <param name="indexNowPage">当前页码</param>
    /// <param name="totalRows">引用参数,总记录数</param>
    /// <param name="totalPages">引用参数,总页数</param>
    /// <returns>分页结果集</returns>
    public DataTable Paging(string tableName, int paeSize, int indexNowPage, ref int totalRows, ref int

totalPages)
    {
        try
        {
            //打开连接
            OpenOracleConnection();

//定义OracleCommand对象,设置命令类型为存储过程
            OracleCommand pOracleCMD = new OracleCommand(m_procedureName, m_oracleConnection);
            pOracleCMD.CommandType = CommandType.StoredProcedure;

//根据存储过程的参数个数及类型生成参数对象
            OracleParameter p1 = new OracleParameter("rowCountPerPage", OracleType.Number, 10);
            OracleParameter p2 = new OracleParameter("indexNowPage", OracleType.Number, 10);
            OracleParameter p3 = new OracleParameter("tabName", OracleType.VarChar, 50);
            OracleParameter p4 = new OracleParameter("totalRows", OracleType.Number, 10);
            OracleParameter p5 = new OracleParameter("totalPages", OracleType.Int16, 10);
            OracleParameter p6 = new OracleParameter("p_cursor", OracleType.Cursor);

//设置参数的输入输出类型,默认为输入
            p1.Direction = ParameterDirection.Input;
            p2.Direction = ParameterDirection.Input;
            p3.Direction = ParameterDirection.Input;
            p4.Direction = ParameterDirection.Output;
            p5.Direction = ParameterDirection.Output;
            p6.Direction = ParameterDirection.Output;

//对输入参数定义初值,输出参数不必赋值.
            p1.Value = paeSize;
            p2.Value = indexNowPage;
            p3.Value = tableName;

//按照存储过程参数顺序把参数依次加入到OracleCommand对象参数集合中
            pOracleCMD.Parameters.Add(p1);
            pOracleCMD.Parameters.Add(p2);
            pOracleCMD.Parameters.Add(p3);
            pOracleCMD.Parameters.Add(p4);
            pOracleCMD.Parameters.Add(p5);
            pOracleCMD.Parameters.Add(p6);

//执行,把分页结果集填入datatable中
            OracleDataAdapter pOracleDataAdapter = new OracleDataAdapter(pOracleCMD);
            DataTable datatable = new DataTable();
            pOracleDataAdapter.Fill(datatable);

//在执行结束后,从存储过程输出参数中取得相应的值放入引用参数中以供程序调用
            totalRows = int.Parse(p4.Value.ToString());
            totalPages = int.Parse(p5.Value.ToString());

//关闭连接
            CloseOracleConnection();

return datatable;
        }
        catch(Exception ex)
        {
            return null;
        }

}

/// <summary>
    /// 关闭连接
    /// </summary>
    private void CloseOracleConnection()
    {
        if (m_oracleConnection.State == ConnectionState.Open)
        {
            m_oracleConnection.Close();
        }
    }

/// <summary>
    /// 打开连接
    /// </summary>
    private void OpenOracleConnection()
    {
        if (m_oracleConnection.State== ConnectionState.Closed)
        {
            m_oracleConnection.Open();
        }
    }

}

转载于:https://www.cnblogs.com/jasonjiang/archive/2010/07/29/1787798.html

C#调用Oracle存储过程分页相关推荐

  1. mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析

    mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析 参考文章: (1)mybatis 调用 oracle 存储过程 select in ...

  2. java调用存储过程 oracle_java调用oracle存储过程

    java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4" ...

  3. spring+springMvc+mybatis 调用oracle 存储过程

    最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键, 接下来整理代 ...

  4. 关于调用Oracle存储过程时发生“BCD Overflow”错误的处理

    笔者最近在使用TSQLStoredProc调用Oracle存储过程时发现,即使存储过程体为空时,都会发生 BCD Overflow 错误,该表部分定义如下: PLANE_ALL_PARAMETER表: ...

  5. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  6. python调用oracle存,Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法.分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL. 首先,在数据库端 ...

  7. java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?

    求助,JAVA Spring 连接池 调用 Oracle 存储过程的问题?在Spring中配置了c3P0的连接池,在调用Oracle的存储过程时,报错[code]java.lang.ClassCast ...

  8. SQL那些事儿(十四)--C#调用oracle存储过程(查询非查询and有参无参)深度好文

    最近老总让使用存储过程,说这个比较好用,抓起本oracle书看了看,写存储过程不是很难,但是写了存储过程调用的时候遇到许多问题,经过一天时间,把各种能遇到i的问题基本总结了下,跟大家分享. 照例画了张 ...

  9. qt 处理oracle事务,qt调用oracle存储过程,该怎么处理(2)

    当前位置:我的异常网» QT开发 » qt调用oracle存储过程,该怎么处理 qt调用oracle存储过程,该怎么处理(2) www.myexceptions.net  网友分享于:2013-03- ...

最新文章

  1. python有没有中文版-python有中文版吗
  2. sd-wan公司组网解决方案效果如何?
  3. linux和java_java内存和linux关系
  4. Spring Cloud Sidecar –节点初始化
  5. linux 更改配置文件 禁止ssh,配置linux用户实现禁止ssh登陆但可用sftp登录
  6. TutorialGateway 中文系列教程【翻译完成】
  7. VC6.0+番茄助手安装教程
  8. 力荐 | 台大林轩田《机器学习基石》资源汇总
  9. mysql的chakan biao_MySQL_Mysql中文汉字转拼音的实现(每个汉字转换全拼),一、创建拼音对照表 复制代 - phpStudy...
  10. QQ群发消息c语言编程,简单写一个实现QQ群发功能的软件
  11. 电脑不兼容linux,解决方法:Linux存在图形卡不兼容问题
  12. 浩辰3D软件新手入门攻略:草图平面
  13. 我见过的最糟糕代码,看了都说好!
  14. Magnetic Levitation for Soft-Tethered Capsule Colonoscopy Actuated With a Single Permanent Magnet
  15. 时光不会辜负你一直以来的坚持——读《人生效率手册》
  16. Redis数据类型的选择
  17. html怎样导入ps,【Photoshop软件新手向】如何导入/自制笔刷?
  18. 北大郭炜《程序设计与算法(三)》Mooc笔记:运算符重载和继承
  19. Visual Studio Code | VSCode设置语言
  20. TCP/IP协议 | 四层模型

热门文章

  1. python语言入门与精通-Python 为什么入门容易 精通难
  2. python三层装饰器-python3装饰器
  3. python下载文件到本地-python从下载链接下载文件到本地
  4. python def是什么意思-python中def是什么
  5. python一个月能学成嘛-0基础学Python,1个月写爬虫,走了哪些弯路?
  6. python基础语法手册format-Python format 格式化函数
  7. zerodivisionerror什么意思python-【转】为什么 Python 中的 True 等于 1
  8. python基础常用语句-Python基础语法
  9. linux下载哪个python版本-Linux下切换Python版本的几种方法
  10. python使用字典格式化字符串-python实现字符串和字典的转换