C#执行oracle返回游标类型的存储过程
存储过程代码为:
create or replace procedure proc_test(pCursor OUT pak_pub.ut_cursor) AS
begin
-- 使用游标
open pCursor for select * from temp;
end ;
其中pak_pub.ut_cursor的定义为:
/*创建一个package存放定义的游标*/
create or replace package pak_pub
as
type ut_cursor is ref cursor;
end;
C#执行oracle存储过程:
//存储过程参数设置
OracleParameter[] par =
{
new OracleParameter("pCursor", OracleType.Cursor)
};
par[].Direction = ParameterDirection.Output;
DataTable re = new DBHelper(connection).GetDataTable("proc_test",CommandType.StoredProcedure, par);
DBHelper类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Data.OracleClient; namespace Jory.Core.Utility
{
public class DBHelper
{
#region 数据库连接字符串 /// <summary>
/// 数据库连接字符串
/// </summary>
private string conStr { get; set; }
public DBHelper()
{
conStr = "";
} public DBHelper(PbConnection connection)
{
conStr = connection.ConnectionString;
}
#endregion #region 数据的增删改
/// <summary>
/// 数据的增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType, params OracleParameter[] opar)
{
using (OracleConnection con = new OracleConnection(conStr))
{
using (OracleCommand cmd = new OracleCommand(sql, con))
{
con.Open();
// 设置命令文本(存储过程名或SQL语句)
cmd.CommandType = commandType;
cmd.Parameters.AddRange(opar);
return cmd.ExecuteNonQuery();
}
}
}
#endregion #region 数据查询结果集为一行一列
/// <summary>
/// 数据查询结果集为一行一列
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public object ExecuteScalar(string sql, CommandType commandType, params OracleParameter[] opar)
{
using (OracleConnection con = new OracleConnection(conStr))
{
using (OracleCommand cmd = new OracleCommand(sql, con))
{
cmd.Parameters.AddRange(opar);
// 设置命令文本(存储过程名或SQL语句)
cmd.CommandType = commandType;
con.Open();
return cmd.ExecuteScalar();
}
}
}
#endregion #region 返回查询结果集Table
/// <summary>
/// 返回查询结果集Table
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public DataTable GetDataTable(string sql, CommandType commandType, params OracleParameter[] opar)
{
DataTable dt = new DataTable();
using (OracleDataAdapter dap = new OracleDataAdapter(sql, conStr))
{
dap.SelectCommand.Parameters.AddRange(opar);
dap.SelectCommand.CommandType = commandType;
dap.Fill(dt);
}
return dt;
}
#endregion #region 返回查询结果集DataReader
/// <summary>
/// 返回查询结果集DataReader
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public OracleDataReader DataReader(string sql, CommandType commandType, params OracleParameter[] opar)
{
OracleConnection con = new OracleConnection();
using (OracleCommand cmd = new OracleCommand(sql, con))
{
cmd.CommandType = commandType;
cmd.Parameters.AddRange(opar);
try
{
con.Open();
// 执行完关闭对象 con
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
con.Close();
con.Dispose();
throw;
}
}
}
#endregion
}
}
PbConnection类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Jory.FrameWork.Common
{
public class PbConnection
{
public string ConnectionString
{
get;
set;
} public PbConnection()
{
}
public PbConnection(string connectionString)
{
ConnectionString = connectionString;
}
}
}
C#执行oracle返回游标类型的存储过程的更多相关文章
- C#(在WeBAPI)获取Oracle(在PL/SQL)游标类型的存储过程(用到了RefCursor)
需求:WebAPI服务端,通过Oracle数据库的存储过程,获取数据. 在PL/SQL 建立存储过程:(先来最简单的,就是把整个表都查出来) create or replace procedure S ...
- Oracle 返回结果集的 存储过程
create or replace PROCEDURE SPGETROLELIST ( P_APPCODE IN VARCHAR2 , P_USERROLE IN VARCHAR2 , CUR_RES ...
- EF执行SQL返回动态类型
using System; using System.Data.Common; using System.Data.Entity.Core.Objects; using System.Data.Ent ...
- Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...
- mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的 ...
- Oracle使用游标为所有用户表添加主键语句
应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...
- oracle ibatis 存储过程 返回游标 嵌套表
自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...
- (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程
原文链接:http://www.jb51.net/article/20160.htm 实际项目当中经常需要在一个存储过程中调用另一个存储过程返回的游标,本文列举了两种情况讲述具体的操作方法. 第一种情 ...
- Matlab调用返回游标的存储过程的分析和处理
2.Matlab调用Oracl带游标参数输出的存储过程 笔者也是将工作之中遇到的问题进行了搜集与整理,才完成该文的编写,希望能帮助到有需要的朋友. 2.1.PLSQL中的存储过程 PROCEDURE ...
随机推荐
- xCode里面设置NSZombieEnabled定位错误
打开product ->scheme->Edit scheme
- IOS 多个ImageView图片层叠透明区域点击事件穿透
经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件 实现人体各个部位点击 - (BOOL) pointInside:(CGPoint)point withEve ...
- vim 语法高亮
1 .配置文件的位置 在文件夹 /etc/ 以下.有个名为vimrc 的文件.这是系统中公共的vim配置文件.对全部用户都有效.而在每一个用户的主文件夹下,都能够自己建立私有的配置文件,命名为:&qu ...
- 用 Qt 中的 QDomDocument类 处理 XML 文件(上)
我们可以看到,如果所要读取的XML文件不是很大,采用DOM读取方法还是很便捷的,由于我用的也是DOM树读取的方法,所以,本文所介绍的也主要是基于DOM的方法读取. 根据常用的操作,我简单的把对XM ...
- Java NIO——Selector机制源码分析---转
一直不明白pipe是如何唤醒selector的,所以又去看了jdk的源码(openjdk下载),整理了如下: 以Java nio自带demo : OperationServer.java Oper ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...
- Bash远程文件传输命令scp
备份远程文件(远程——>本地) scp -r 远程用户名@ip:文件绝对路径 本地绝对路径 还原远程文件(本地——>远程) scp -r 本地路径 远程用户名@ip:远程绝对路径 如果SS ...
- poj 3565 ants
/* poj 3565 递归分治 还有用KM的做法 这里写的分治 按紫书上的方法 不过那里说的有点冗杂了 可以简化一下 首先为啥可以分治 也就是分成子问题解决 只要有一个集合 黑白的个数相等 就一定能 ...
- asp.net 的脚本
asp.net的 Web 控件有时会包装一些用户端脚本 (client-side scripting),在控件被绘制时输出到用户端,这些脚本多数被包装在 DLL 的资源档中,并由 ScriptReso ...
- cocos2dx 的Hello world的简单分析
Node之间的关系: 场景AppDelegate.cpp又要由导演去调用然后进行表演: // create a scene. it's an autorelease object auto scene ...