博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle学习 第30天 C#调用存储过程和语句
阅读量:5272 次
发布时间:2019-06-14

本文共 1719 字,大约阅读时间需要 5 分钟。

看了一下记录,第一次看Oracle的教程是16年6月10号,一年零一个多月了,才累计了30天的学习。。。

经过几天的折腾,终于能在C#里像调用SQL Server一样自如地调用Oracle的存储过程和语句了,虽然有些曲折,但好歹能实现

一、C#调用Oracle

要引用Oracle.ManagedDataAccess.dll,一个就够了,连接串如下,要注意是【providerName="Oracle.ManagedDataAccess.Client"】,网上有时说是【providerName="Oracle.ManagedDataAccess"】,折腾了半天

 

二、DataReader

原先代码里处理SQL Server都有一整套的DataReader处理方法,也提供了Oracle的,把SqlXXX的全改为OracleXXX的就可以了

 

三、直接执行Oracle语句

和SQL类似,但要注意"SELECT * FROM XX"的Oracle语句里末尾不能带分号。

封装好的ExecuteNoQuery、ExecuteScalar、ExecuteReader 用法都完全一样

 

四、参数化调用存储过程

如果需要存储过程输出,则要在参数类里定义一个可取出的游标

sCUR = new OracleParameter("@sCUR", OracleDbType.RefCursor, ParameterDirection.Output);

Oracle存储过程不支持直接输出SELECT * XX 这样的结果集了,只能用游标OPEN CURSOR FOR SELECT * FROM XX,这是特别烦的一点

 

五、调用函数

基本类似,函数倒可以直接返回内容,一般也都是字符串

 

六、直接用语句(字符串)调用存储过程

这个稍微折腾了一下,想要像SQL那样直接"EXEC XXX('xx')"这么爽是不行的,原本都快放弃了,但最终想到一个变通的方法

1、定义一个中转存储过程,用于接收字符串语句,第一个参数用于内部一些区分(这里暂没用到),第二个参数是要执行的字符串,第三个参数是要带出数据的游标

CREATE OR REPLACE PROCEDURE upCurrentQuery (    sAction VARCHAR2,    sSQLText VARCHAR2,    sCUR OUT SYS_REFCURSOR) ASsSQL CLOB;BEGIN    EXECUTE IMMEDIATE sSQLText USING sCUR;END upCurrentQuery;

 

2、由于存储过程调用要有BEGIN END,干脆封装在参数类里,省得每次都要传

UpCurrentQueryParam param = new UpCurrentQueryParam{  sAction = { Value = model.sAction },  sSQLText =  {    Value = string.Format(@"  BEGIN    {0}  END;", model.sSQLText)  }};

 

 

3、调用存储过程时不要加EXEC或CALL,直接写存储过程名,要注意最后要带上:XX的游标(与存储过程里的名字要一致),这样通过中转存储过程的USING XX就可以带出结果集了

UpCurrentQueryModel ucqModel = new UpCurrentQueryModel{        sAction = "",        sSQLText = @"XXX('XX', '', :sCUR);"};

 

七、Linq

之前有一篇随笔研究过了,一定表、字段定义注意下即可,Linq查询本身不用动

 

八、分页

暂时没去研究了,既然存储过程能调用,应该也是传些参数进行分页即可。但刚上手时也会有坑就是了

 

Oracle的研究暂告一段落吧,刚好满30天,下一阶段打算引进一个新的UI到项目(测试)中进行练习

 

转载于:https://www.cnblogs.com/liuyouying/p/7242822.html

你可能感兴趣的文章
2019-02-28处理公司同事无法上网事件记录
查看>>
cookie的过期时间
查看>>
HTCVive使用
查看>>
Javascript 浏览器检测
查看>>
Java程序员常用工具类库
查看>>
头文件有h和没有h的区别
查看>>
数据库的查询与视图
查看>>
洪涝有源淹没算法及淹没结果分析
查看>>
Flex在使用无线电的button切换直方图横坐标和叙述性说明
查看>>
C++ AMP 介绍(两)
查看>>
C++垃圾回收器的实现
查看>>
IOS TableView的Cell高度自适应,UILabel自动换行适应
查看>>
Redis系统学习 二、数据结构
查看>>
(二)数据加密技术
查看>>
Iptables和Firewall-selinux
查看>>
C#设置程序自启动
查看>>
Hadoop基准测试(一)
查看>>
Linux下解压缩文件命令总结
查看>>
通过cookie验证用户登录
查看>>
2016012083+小学四则运算练习软件项目报告
查看>>