点击这里返回目录

双击 GET_CATEGORIES_AND_PRODUCTS 存储过程,代码如下:

代码

PACKAGE BODY PKG3 IS
PROCEDURE GET_CATEGORIES_AND_PRODUCTS(MYCS1 OUT MYTYPE1, MYCS2 OUT MYTYPE2) IS
BEGIN
OPEN MYCS1 FOR SELECT CATEGORYID, CATEGORYNAME, DESCRIPTION
FROM CATEGORIES;
OPEN MYCS2 FOR SELECT PRODUCTID, PRODUCTNAME
FROM PRODUCTS;
END GET_CATEGORIES_AND_PRODUCTS;
END PKG3;

这个存储过程是使用两个返回参数返回结果的,并且这两个参数是游标类型,对于与游标类型对应的 .NET CLR 类型是 Oracle.DataAccess.Types.OracleRefCursor 。

代码

public partial class NorthwindDataContext : ALinq.DataContext
{
[ALinq.Mapping.Function(Name = "PKG3.GET_CATEGORIES_AND_PRODUCTS")]
public void GetCategoryAndProducts(out OracleRefCursor cursor1, out OracleRefCursor cursor2)
{
cursor1 = null;
cursor2 = null;
var result = ExecuteMethodCall(this, (MethodInfo)MethodBase.GetCurrentMethod(), cursor1, cursor2);
cursor1 = (OracleRefCursor)result.GetParameterValue(0);
cursor2 = (OracleRefCursor)result.GetParameterValue(1);
}
}

映谢到该存储过程的方法如下:

代码

public partial class NorthwindDataContext : ALinq.DataContext
{
[ALinq.Mapping.Function(Name = "PKG3.GET_CATEGORIES_AND_PRODUCTS")]
public void GetCategoryAndProducts(
[ALinq.Mapping.Parameter(Name = "MYCS1", DbType = "REF CURSOR")]
out Oracle.DataAccess.Types.OracleRefCursor cursor1,
[ALinq.Mapping.Parameter(Name = "MYCS2", DbType = "REF CURSOR")]
out Oracle.DataAccess.Types.OracleRefCursor cursor2)
{
cursor1 = null;
cursor2 = null;
var result = ExecuteMethodCall(this, (MethodInfo)MethodBase.GetCurrentMethod(), cursor1, cursor2);
cursor1 = (OracleRefCursor)result.GetParameterValue(0);
cursor2 = (OracleRefCursor)result.GetParameterValue(1);
}
}

我们很容易发现,和前面不同的是,cursor1 和 cursor2 参数前面都加了一个 out ,另外,由于该存储过程带有返回的参数,因此需要调用 result.GetParameterValue(index) 来获得该参数的返回值,其中 Index 为参数的次序。

调用代码:

代码

static void Main(string[] args)
{
var dc = new NorthwindDataContext() { Log = Console.Out };
OracleRefCursor cursor1 = null;
OracleRefCursor cursor2 = null;
dc.Connection.Open();
dc.GetCategoryAndProducts(out cursor1, out cursor2);
var categories = dc.Translate<Category>(cursor1.GetDataReader()).ToArray();
var products = dc.Translate<Product>(cursor2.GetDataReader()).ToArray();
dc.Connection.Close();

foreach (var category in categories)
Console.WriteLine("{0} {1}", category.Categoryid, category.Categoryname);

foreach (var product in products)
Console.WriteLine("{0} {1}", product.Productid, product.Productname);
}

由于需要用到 Reader , 因此连接必须一定保持打开状态,直接数据读取完毕。因此需要显式打开连接(dc.Connection.Open),在使用完后再关闭(dc.Connection.Close)。

点击这里返回目录

Linq to Oracle 使用教程(七)将数据库的存储过程映射到方法相关推荐

  1. Linq to Oracle 使用教程(三)数据的增、删、改

    点击这里返回目录 创建 DataContext 对象 var dc = new NorthwindDataContext() { Log = Console.Out }; 插入数据 var produ ...

  2. Linq to Oracle 使用教程(八)使用 T4 模版生成代码

    点击这里返回目录   禁用原来的代码生成(可选步骤) 选择 Northwind.admf 文件,在属性窗口中,将 Custom Tool 属性设置为空,原来值为 ALinqCodeGenerator ...

  3. 【Hbu数据库】第七周 数据库完整性 存储过程和函数

    数据库完整性 实体完整性 定义实体完整性 实例完整性检查和违约处理 参照完整性 定义参照完整性 参照完整性检查和违约处理 用户定义完整性 属性上的约束条件 属性上约束条件的定义 元组上的约束条件 完整 ...

  4. oracle通过DBlink连接神通数据库方法教程

    oracle通过DBlink连接神通数据库方法教程 (其他数据库也可以) **1.首先确认自己电脑版本 ** 找到Microsoft ODBC ,exe程序位置 :C:\Windows\System3 ...

  5. Oracle基础教程

    Oracle基础教程 一.用户权限 1.1 创建用户 1.2 删除用户 1.3 用户赋权限 1.4 收回用户权限 二.表空间 2.1 创建用户指定默认表空间: 2.2 修改用户默认表空间: 2.3 查 ...

  6. MongoDB 教程七: MongoDB和PHP结合开发

    视频:MongoDB 教程七: MongoDB和PHP结合开发 Linux上安装 MongoDB PHP扩展 在终端上安装 你可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动 ...

  7. oracle 建立一个游戏库,Power Designer怎么新建Oracle数据?建立Oracle数据教程分享

    powerdesigner是一款开发人员常用的数据库建模工具.最近许多小伙伴在使用Power Designer的时候,不知道怎么建立Oracle数据?下面游戏爱好者小编就分享了Power Design ...

  8. Oracle11使用现在数据库文件,oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库...

    oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库 最近由于系统重装,在还原dmp备份文件时,由于数据原因(用exp命令导出时表没有导出全部),导致系统不能正常运行.根据 ...

  9. 大数据基础教程丨TiDB数据库从入门到实践

    TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的 ...

最新文章

  1. 编写 Spring MVC 控制器的 14 个技巧
  2. linux 子进程exit6,Linux内核之do_exit
  3. lower_boundupper_bound
  4. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
  5. poj1201/zoj1508/hdu1384 Intervals(差分约束)
  6. cookie、session、sessionid 与jsessionid
  7. 在MongoDB中存储分层数据
  8. 基于android的高仿抖音,Android仿抖音列表效果
  9. java java se_Java SE 9:不可变集的工厂方法
  10. webstorm 自定义项目模板
  11. c++如何生成一个不能被继承的类
  12. 市场细分与目标群体定位
  13. Android简历知识点模板
  14. 塞力斯是鸿蒙系统吗,赛力斯“驼峰”智能增程系统为何物?一亮相就引起行业沸腾...
  15. 数制转换c语言编程,C语言数据结构中数制转换实例代码
  16. 11.NDP协议分析与实践
  17. css中文字操超出固定个数显示省略... 超出隐藏
  18. 大佬终于把鸿蒙OS讲明白了,以后我也可以吹喽!
  19. TCPcopy安装、部署
  20. Matlab中sym无法使用

热门文章

  1. 我最喜欢的科目是计算机课英语,初一英语作:my favorite subject(我最喜欢的科目)要求写美术课(art),80词以上,拜托啦!...
  2. hive 语句总结_HiveQL查询语句总结
  3. superset ubuntu16.04 python3 安装
  4. 采用JAVASCRIPT实现全选的三种情况
  5. 使用HttpClient发送WebService Security(WSS)请求
  6. java中的split使用的是正则表达式
  7. javah命令 C Header and Stub File Generator
  8. 2019级软件1班安卓实训总结
  9. 安卓案例:利用SQLiteDatabase操作数据库与表
  10. english 2012020601