c#调oracle存储过程返回结果集

本文详细介绍了如何使用C#语言通过Oracle client和ODP.net两种方式访问Oracle存储过程,包括如何定义存储过程、参数设置、执行过程等,并特别指出返回结果集的方法。同时,文章还对比了调用Oracle函数与存储过程的不同之处,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c#调oracle存储过程返回结果集 

2012-07-28 21:57:49|  分类: 专业 |  标签:oracle  odp.net  oracleclient  c#  refcursor  |字号订阅

 
 

这是无比重要的一个问题。

一般有两种方法可以访问到oracle,一种是调dotnet自带的oracleclient。一种是调用oracle官方提供的ODP.net。

两者提供的接口基本一样。关于如何在存储过程中返回结果集。上一篇文章中已找到了办法。现在稍微总结一下:

一、给要返回记录集的存储过程定义sys_refcursor类型的out参数,例如:

  create or replace procedure test01(v out sys_refcursor)……

二、在存储过程体中写open v for select ................

写法就这么简单。存储过程可以写在包里面,也可以不写在包里面,有人讲:存储过程如果要返回记录集,一定要自己定义包,然后在包里面定义存储过程。本人已经作了实验,在包里、包外都可以。

在C#中怎么做呢?

一、引用

  如果是oracleclient,引用System.Data.OracleClient

  题外话:不知道要不要装oracleclient,配置tns。总之我是配了的。没有调过没配会怎么样。

  如果是ODP.net,引用Oracle.DataAccess,还需将如下文件复制到exe的运行目录下,如果是debug模式下调试,bin/debug下。

  c调oracle存储过程返回结果集 - 伯平 - 涤心斋

  项目引用截图如下:

  c调oracle存储过程返回结果集 - 伯平 - 涤心斋

二、解决了引用,那就是代码中怎么写了,截图如下:

c调oracle存储过程返回结果集 - 伯平 - 涤心斋
如上图所示,图中标圈的都是要注意的。
1.如果存储过程定义在包中,请在前面带上包名,如果不在包中,直接在commandText中放存储过程名即可
2.odp.net中,返回记录集的参数应为RefCursor。oracleclient版写法则是Cursor
3.千万要注意, 参数类型一定要是Output,而不是网上一些资料中所说的ReturnValue。一用ReturnValue就报错。

三、上面是调存储过程,那么调oracle中的函数又是如何调的呢,有什么不同?

1.函数及上面的存储过程代码如下:

c调oracle存储过程返回结果集 - 伯平 - 涤心斋
2.c#中调用代码如下:
c调oracle存储过程返回结果集 - 伯平 - 涤心斋
对比前面,有什么不同?
在c#代码中,唯一的不同就是参数的Direction不同,是ReturnValue。可见网上的诸位大侠所说的用ReturnValue的情况应是指调函数,而非存储过程。

转载于:https://www.cnblogs.com/huxian/p/3300588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值