Linq to Oracle 使用教程(七)将数据库的存储过程映射到方法
点击这里返回目录
双击 GET_CATEGORIES_AND_PRODUCTS 存储过程,代码如下:
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 。
{
[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);
}
}
映谢到该存储过程的方法如下:
{
[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 为参数的次序。
调用代码:
{
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 使用教程(七)将数据库的存储过程映射到方法相关推荐
- Linq to Oracle 使用教程(三)数据的增、删、改
点击这里返回目录 创建 DataContext 对象 var dc = new NorthwindDataContext() { Log = Console.Out }; 插入数据 var produ ...
- Linq to Oracle 使用教程(八)使用 T4 模版生成代码
点击这里返回目录 禁用原来的代码生成(可选步骤) 选择 Northwind.admf 文件,在属性窗口中,将 Custom Tool 属性设置为空,原来值为 ALinqCodeGenerator ...
- 【Hbu数据库】第七周 数据库完整性 存储过程和函数
数据库完整性 实体完整性 定义实体完整性 实例完整性检查和违约处理 参照完整性 定义参照完整性 参照完整性检查和违约处理 用户定义完整性 属性上的约束条件 属性上约束条件的定义 元组上的约束条件 完整 ...
- oracle通过DBlink连接神通数据库方法教程
oracle通过DBlink连接神通数据库方法教程 (其他数据库也可以) **1.首先确认自己电脑版本 ** 找到Microsoft ODBC ,exe程序位置 :C:\Windows\System3 ...
- Oracle基础教程
Oracle基础教程 一.用户权限 1.1 创建用户 1.2 删除用户 1.3 用户赋权限 1.4 收回用户权限 二.表空间 2.1 创建用户指定默认表空间: 2.2 修改用户默认表空间: 2.3 查 ...
- MongoDB 教程七: MongoDB和PHP结合开发
视频:MongoDB 教程七: MongoDB和PHP结合开发 Linux上安装 MongoDB PHP扩展 在终端上安装 你可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动 ...
- oracle 建立一个游戏库,Power Designer怎么新建Oracle数据?建立Oracle数据教程分享
powerdesigner是一款开发人员常用的数据库建模工具.最近许多小伙伴在使用Power Designer的时候,不知道怎么建立Oracle数据?下面游戏爱好者小编就分享了Power Design ...
- Oracle11使用现在数据库文件,oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库...
oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库 最近由于系统重装,在还原dmp备份文件时,由于数据原因(用exp命令导出时表没有导出全部),导致系统不能正常运行.根据 ...
- 大数据基础教程丨TiDB数据库从入门到实践
TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的 ...
最新文章
- 编写 Spring MVC 控制器的 14 个技巧
- linux 子进程exit6,Linux内核之do_exit
- lower_boundupper_bound
- BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
- poj1201/zoj1508/hdu1384 Intervals(差分约束)
- cookie、session、sessionid 与jsessionid
- 在MongoDB中存储分层数据
- 基于android的高仿抖音,Android仿抖音列表效果
- java java se_Java SE 9:不可变集的工厂方法
- webstorm 自定义项目模板
- c++如何生成一个不能被继承的类
- 市场细分与目标群体定位
- Android简历知识点模板
- 塞力斯是鸿蒙系统吗,赛力斯“驼峰”智能增程系统为何物?一亮相就引起行业沸腾...
- 数制转换c语言编程,C语言数据结构中数制转换实例代码
- 11.NDP协议分析与实践
- css中文字操超出固定个数显示省略... 超出隐藏
- 大佬终于把鸿蒙OS讲明白了,以后我也可以吹喽!
- TCPcopy安装、部署
- Matlab中sym无法使用
热门文章
- 我最喜欢的科目是计算机课英语,初一英语作:my favorite subject(我最喜欢的科目)要求写美术课(art),80词以上,拜托啦!...
- hive 语句总结_HiveQL查询语句总结
- superset ubuntu16.04 python3 安装
- 采用JAVASCRIPT实现全选的三种情况
- 使用HttpClient发送WebService Security(WSS)请求
- java中的split使用的是正则表达式
- javah命令 C Header and Stub File Generator
- 2019级软件1班安卓实训总结
- 安卓案例:利用SQLiteDatabase操作数据库与表
- english 2012020601