C#执行oracle返回游标类型的存储过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#执行oracle返回游标类型的存储过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3702字,纯文字阅读大概需要6分钟。
内容图文
![C#执行oracle返回游标类型的存储过程](/upload/InfoBanner/zyjiaocheng/462/2ee47bed58b840b49b727ea91c27bb28.jpg)
其中pak_pub.ut_cursor的定义为:
create or replace package pak_pub as type ut_cursor is ref cursor; end;
两种方式:1、用微软自带的ORACLE数据访问接口(using System.Data.OracleClient)
注意.NET 4.0里已经没有了System.Data.OracleClient
2、使用ODP.NET(引用oracle客户端里的Oracle.DataAccess.dll)
//存储过程参数设置 OracleParameter[] sqlParme = new OracleParameter[1]; //参数1 sqlParme[0] = new OracleParameter("pCursor", OracleType.Cursor); sqlParme[0].Direction = ParameterDirection.Output; DataTable re = DBAccess.DBExecStoredProcedure("proc_test", sqlParme);
DBAccess.DBExecStoredProcedure函数实现
public static DataTable DBExecStoredProcedure(string spName, OracleParameter[] sqlParme) { try { //使用微软的ORACLE访问接口 OraCmd.CommandText = spName; OraCmd.CommandType = CommandType.StoredProcedure; OraCmd.Parameters.Clear();//先清空 foreach (OracleParameter parme in sqlParme) { OraCmd.Parameters.Add(parme); } DataSet ds1; DateTime EndTime; TimeSpan sp; ds1 = new DataSet(); DateTime BegTime = System.DateTime.Now; OracleDataAdapter da1 = new OracleDataAdapter(OraCmd);//取出数据 da1.Fill(ds1); EndTime = System.DateTime.Now; string str = "spare time:" + (EndTime - BegTime).ToString(); DataTable dt = ds1.Tables[0]; //调试 if (dt != null && dt.Rows.Count != 0) MessageBox.Show("返回记录数" + dt.Rows.Count.ToString() + "\n" + str); TraceLog.Trace("执行时间", "返回记录数" + dt.Rows.Count.ToString() + "\n" + str); return dt; } catch (InvalidCastException e) { TraceLog.Trace("错误", e.Message + " IOException source:"+e.Source); return null; } }
第二种方式:
//使用ORACLE客户端访问接口 OracleParameter[] sqlParme = new OracleParameter[1]; //参数1 sqlParme[0] = new OracleParameter("pCursor", OracleDbType.RefCursor); sqlParme[0].Direction = ParameterDirection.Output; DataTable re = DBAccess.DBExecStoredProcedure("proc_test", sqlParme);
DBAccess.DBExecStoredProcedure函数实现同第一种方式的.
数据库连接(ODP.NET方式)
//DB连接 public static bool DBConnect(string puser,string pwd,string ds){ try { if (OraConn!= null)//如果连接没关闭,先关闭 OraConn.Close(); string ConString = "Data Source=" + ds + ";User Id=" + puser + ";Password=" + pwd; OraConn = new OracleConnection(ConString); OraCmd = new OracleCommand("", OraConn); OraConn.Open(); return true; } catch{ return false; } }
是用.net自带的访问接口连接方法稍有不同:
(连接字串应该这样写)
string ConString =
"Data Source=TEST;user=TEST001;password=123456"
;
感觉上其实区别不大,只是如果要用到PL/SQL的数组变量的时候,第二种方式的特点就突显出来了,(而且微软已经声明.NET 4.0后不在包含oracle的访问接口,所以很多开发者都开始转向使用oracle公司提供的访问接口)
oracle客户端的数据访问接口支持Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray,数组变量,而且支持长度限制,由于我演示的没有传入参数,这里就简单说一下,有传入参数的时候,这样
sqlParme[0] = new OracleParameter("param1", OracleDbType.Varchar2,1000);//可限制传入参数长度 sqlParme[0].Direction = ParameterDirection.Input; string s = "传入参数"; sqlParme[0].Value = s;
如果传入参数是PL/SQL的数组类型那就这样传
sqlParme[0] = new OracleParameter("pDimensionFields", OracleDbType.Varchar2,1000); sqlParme[0].Direction = ParameterDirection.Input; sqlParme[0].CollectionType = OracleCollectionType.PLSQLAssociativeArray string[] s =new string[]{ "1","2","3"}; sqlParme[0].Value = s;
C#执行oracle返回游标类型的存储过程
标签:
本文系统来源:http://www.cnblogs.com/OraCursor/p/5361144.html
内容总结
以上是互联网集市为您收集整理的C#执行oracle返回游标类型的存储过程全部内容,希望文章能够帮你解决C#执行oracle返回游标类型的存储过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。