C#调用Oracle存储过程

Oracle分页存储过程如下:

  1. --注意,在Oracle,存储过程需要放在包下面   
  2. create or replace package PKG_split_Page is  
  3. TYPE p_cur1 IS REF CURSOR;  
  4. PROCEDURE proc_split_page  
  5. (  
  6.   rowcountPerPage NUMBER,  --每页面记录条数   
  7.   indexNowPage NUMBER,       --当前页码   
  8.   tabName VARCHAR2,             --分页表名   
  9.   totalRows OUT NUMBER,        --总记录数   
  10.   totalPages OUT NUMBER,        --总页数   
  11.   p_cursor OUT PKG_split_Page.p_cur1     --游标,用于返回结果集   
  12.   
  13. );  
  14. end PKG_split_Page;  
--注意,在Oracle,存储过程需要放在包下面
create or replace package PKG_split_Page is
TYPE p_cur1 IS REF CURSOR;
PROCEDURE proc_split_page
(
  rowcountPerPage NUMBER,  --每页面记录条数
  indexNowPage NUMBER,       --当前页码
  tabName VARCHAR2,             --分页表名
  totalRows OUT NUMBER,        --总记录数
  totalPages OUT NUMBER,        --总页数
  p_cursor OUT PKG_split_Page.p_cur1     --游标,用于返回结果集

);
end PKG_split_Page;

C#调用存储过程代码如下:

  1. #region 分页代码(返回数据表、总条数、总页数等)   
  2. /// <summary>   
  3. /// 执行分页    
  4. /// </summary>   
  5. /// <param name="tableName">需分页表名(select查询语句)</param>   
  6. /// <param name="paeSize">每页记录数</param>   
  7. /// <param name="indexNowPage">当前页码</param>   
  8. /// <param name="totalRows">引用参数,总记录数</param>   
  9. /// <param name="totalPages">引用参数,总页数</param>   
  10. /// <returns>分页结果集</returns>   
  11. public DataTable Paging(string tableName, int paeSize, int indexNowPage, ref int totalRows, ref int totalPages)  
  12. {  
  13.     try  
  14.     {  
  15.         //打开连接   
  16.         OpenOracleConnection();  
  17.         //定义OracleCommand对象,设置命令类型为存储过程   
  18.         OracleCommand pOracleCMD = new OracleCommand("pkg_split_page.proc_split_page", conn);//Oracle里面的(包.存储过程)   
  19.         pOracleCMD.CommandType = CommandType.StoredProcedure;//设置执行类型为存储过程   
  20.           
  21.         //根据存储过程的参数个数及类型生成参数对象   
  22.         OracleParameter p1 = new OracleParameter("rowCountPerPage", OracleType.Number);//rowcountPerPage——每页显示的条数   
  23.         OracleParameter p2 = new OracleParameter("indexNowPage", OracleType.Number);//indexNowPage——当前页码   
  24.         OracleParameter p3 = new OracleParameter("tabName", OracleType.VarChar);//tabName——表名   
  25.         OracleParameter p4 = new OracleParameter("totalRows", OracleType.Number);//totalRows——总记录数(output)   
  26.         OracleParameter p5 = new OracleParameter("totalPages", OracleType.Int16);//totalPages——总页数(output)   
  27.         OracleParameter p6 = new OracleParameter("p_cursor", OracleType.Cursor);  
  28.   
  29.         //设置参数的输入输出类型,默认为输入   
  30.         p1.Direction = ParameterDirection.Input;  
  31.         p2.Direction = ParameterDirection.Input;  
  32.         p3.Direction = ParameterDirection.Input;  
  33.         p4.Direction = ParameterDirection.Output;  
  34.         p5.Direction = ParameterDirection.Output;  
  35.         p6.Direction = ParameterDirection.Output;  
  36.   
  37.         //对输入参数定义初值,输出参数不必赋值.   
  38.         p1.Value = paeSize;  
  39.         p2.Value = indexNowPage;  
  40.         p3.Value = tableName;  
  41.   
  42.         //按照存储过程参数顺序把参数依次加入到OracleCommand对象参数集合中   
  43.         pOracleCMD.Parameters.Add(p1);  
  44.         pOracleCMD.Parameters.Add(p2);  
  45.         pOracleCMD.Parameters.Add(p3);  
  46.         pOracleCMD.Parameters.Add(p4);  
  47.         pOracleCMD.Parameters.Add(p5);  
  48.         pOracleCMD.Parameters.Add(p6);  
  49.   
  50.         //执行,把分页结果集填入datatable中   
  51.         OracleDataAdapter pOracleDataAdapter = new OracleDataAdapter(pOracleCMD);  
  52.         DataTable datatable = new DataTable();  
  53.         pOracleDataAdapter.Fill(datatable);  
  54.   
  55.         //在执行结束后,从存储过程输出参数中取得相应的值放入引用参数中以供程序调用   
  56.         totalRows = int.Parse(p4.Value.ToString());  
  57.         totalPages = int.Parse(p5.Value.ToString());  
  58.   
  59.         //关闭连接   
  60.         CloseOracleConnection();  
  61.   
  62.         return datatable;  
  63.     }  
  64.     catch (Exception ex)  
  65.     {  
  66.         string error = ex.ToString();  
  67.         return null;  
  68.     }  
  69.   
  70. }  
  71. #endregion      
  72.  
  73. #region 打开连接   
  74. /// <summary>   
  75. /// 关闭连接   
  76. /// </summary>   
  77. private void CloseOracleConnection()  
  78. {  
  79.     if (conn.State == ConnectionState.Open)  
  80.     {  
  81.         conn.Close();  
  82.     }  
  83. }  
  84. #endregion  
  85.  
  86. #region 关闭连接   
  87. /// <summary>   
  88. /// 打开连接   
  89. /// </summary>   
  90. private void OpenOracleConnection()  
  91. {  
  92.     if (conn.State == ConnectionState.Closed)  
  93.     {  
  94.         conn.Open();  
  95.     }  
  96. }  
  97. #endregion   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值