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 ...
随机推荐
- opencv学习笔记-图像叠加、混合
在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect, ...
- 【设计模式 - 12】之代理模式(Proxy)
1 模式简介 1.1 定义 为其他对象提供一种代理以控制对这个对象的访问.代理对象起到中介作用,可以去掉功能服务或增加额外服务. 1.2 常见的代理模式 1) 远程 ...
- form与action之setter与getter(转)
对于表单提交数据给action时候,可以简单的用setter与getter函数实现值的传递. 例如在jsp里有这么个form: <s:form action="login"& ...
- visual studio 添加链接文件
本文转载http://blog.163.com/zhongpenghua@yeah/blog/static/87727415201282432345613/ 那个有个箭头的文件就是链接文件了,添加 ...
- 解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。
.NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToke ...
- ArrayBlockingQueue 源码阅读 问题(一)
今天阅读java.util.concurrent 中 ArrayBlockingQueue 的源码,发现其中有很多下面这行代码 final ReentrantLock lock = this.lock ...
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)
1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...
- label_设置行距、字距及计算含有行间距的label高度
// // ViewController.m // CNBlogs // // Created by PXJ on 16/5/27. // Copyright © 2016年 PXJ. All ...
- wpf提示背景,资源样式
查找资源时多用element.TryFindResource() <TextBox FontSize="17" Height="26" Margin=&q ...
- Raphaël.js学习笔记
Rapheal.js 是一个矢量图绘图库.对于支持HTML5 SVG的浏览器使用SVG绘图,不支持SVG的IE(ie6,7,8)使用VML绘图.所以Raphael.js的兼容性非常好. Raphael ...