Client使用c#和odp.net连接server oracle
由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleClient.dll与 Oracle.DataAccess.dll相比,微软的确实没有oracle提供的类库有优势,所以我放弃了使用多年的 System.Data.OracleClient.dll,取而代之的是odp.net。然而odp .net 的优点不止这些,还包括:
1、不在安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开)
2、不需要配置TnsNames.Ora文件
当然,我选择odp .net的最主要的原因还是性能。这篇文章列举了两者之间的对比。Technical Comparison: ODP .NET Versus Microsoft OracleClient
下面我将介绍如何在一个在新的项目中使用odp .net。环境配置:A机器,运行C#程序,没有安装oracle数据库或者客户端等任何oracle的产品;B机器就运行着一个oracle9i数据库,再没安装过其它oracle产品
首先要下载odp .net文件,可以在这个页面下载Oracle Data Access Components (ODAC) Downloads ,我下载的是Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio这个版本。
下载完成之后不用安装,将Oracle.DataAccess.dll文件从 ODTwithODAC1110720.zip\stage\Components\oracle.ntoledb.odp _net_2\11.1.0.7.10\1\DataFiles\filegroup4.jar文件中解压出来就行,然后复制到项目中,再添加引用Oracle.DataAccess.dll。
编写如下代码:
using Oracle.DataAccess.Client;
|
...
|
string connstring =
|
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))" +
|
"(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;" ; //这个也可以放到Web.Config中。
|
using (OracleConnection conn = new OracleConnection(connstring))
|
{
|
conn.Open();
|
string sql = "select * from users" ;
|
using (OracleCommand comm = new OracleCommand(sql, conn))
|
{
|
using (OracleDataReader rdr = comm.ExecuteReader())
|
{
|
while (rdr.Read())
|
{
|
Console.WriteLine(rdr.GetString(0));
|
}
|
}
|
}
|
}
|
代码编写好以后,还要从下载的压缩包中取出几个dll文件。
1、oci.dll (在jar文件里面叫’oci.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup2.jar)
2、oraociicus11.dll (in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.ic\11.1.0.7.0\1\DataFiles\filegroup3.jar)
3、OraOps11w.dll (in ODTwithODAC1110720.zip\stage\Components\ oracle.ntoledb.odp _net_2\11.1.0.7.10\1\DataFiles\filegroup3.jar)
下面这三个有人说需要,有人说不需要,反正也不差这三个,继续吧:
4、orannzsbb11.dll (in ODTwithODAC1110720.zip\stage\Components\oracle.ldap.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup1.jar)
5、oraocci11.dll (in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup3.jar)
6、ociw32.dll (在jar文件里面叫’ociw32.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup2.jar)
最后把这个DLL复制到项目中,CS的要与exe一个文件夹,B/S的有专门的bin目录。
当然,使用一项新技术,必然会遇到一些错误:以下是我遇到的:
1、运行的时候遇到这个异常提示’The provider is not compatible with the version of Oracle client’,不要紧张,检查一下上面所用到的dll是否齐全就OK。
2、“找不到请求的 .Net Framework 数据提供程序。可能没有安装。”这个错误提示是因为在machine.config中找不到Oracle.DataAccess.dll,将下面的代码放到
< DbProviderFactories ></ DbProviderFactories >
|
之间就OK。
< add name = "Oracle Data Provider for .NET" invariant = "Oracle.DataAccess.Client" description = "Oracle Data Provider for .NET" type = "Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />
|
注:如果下载的不是ODTwithODAC1110720,有可能 dll的位置不像是上面提到的那样,需要自己去挨个找了
转载于:https://blog.51cto.com/lynn0917/378850
Client使用c#和odp.net连接server oracle相关推荐
- ODP.NET连接池性能计数器
ODP.NET连接池性能计数器 作者:范俊 2013-05-25 阅读本文需要了解两个知识: 1. Oracle Data Provider for .NET(ODP.NET) --ORACLE ...
- net oracle连接池配置,Oracle ODP.NET连接池
数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...
- 远程连接server问题
开启Windows防火墙后,当远程连接Server服务器时被拒绝,其解决方法如下: 1.启动Windows防火墙.开始 > 设置 > 控制面板 > Windows防火墙.缺省情况下, ...
- VB连接Sql Server,Oracle,SyBase,Access数据库操作实例
- VB连接数据库是常用的操作 对于小型数据的存取是非常不错的.在设计时 对于不同数据的连接方式都不同 这里使用了ADODB连接字符串的方式来访问常见的数据库:Sql Server,Oracle,Sy ...
- MobaXterm的SOCKS代理连接与bitvise client 软件的C2S与S2C连接
1.MobaXterm的SOCKS代理连接的一种使用场景 远程两台Linux服务器,外网服务器和内网服务器,外网服务器有内外网ip,内网服务器不提供外网ip 外网服务器外网ip为100.100.100 ...
- Odp.Net 连接Oracle
1.C#连接Oracle可以不安装客户端,但是需要借助Odp.net 免安装Oracle客户端: 将5个Oracle客户端的类库文件提取出来,放到程序根目录下,分别是oci.dll.Oracle.Da ...
- VS连接上oracle数据库,VS2015连接Oracle数据库的详细步骤
开发环境 宿主机:Win10 + VS2015 + ODP.Net for VS2015 虚拟机:Win7 + Oracle 11g + 桥接 配置ODP.Net 首先下载 Oracle Develo ...
- DataStage8.7连接远程Oracle数据库
♣参考资料: http://www-01.ibm.com/support/docview.wss?uid=swg21441132 http://space.itpub.net/6126/viewspa ...
- sql 链接到oracle数据库,通过MSSQL连接服务器连接至Oracle数据库
前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...
最新文章
- 浅谈单片机中变量访问的互斥
- 步步为营-77-Ajax简介
- 信号转化java_Java基础知识回顾-7
- 记录下kaggle比赛经验
- 【白皮书分享】2020用户生命周期运营白皮书2.0.pdf(附下载链接)
- oracle中的自增关键字,Oracle中设置自增字段
- 用 Mac 制作手写签名,没打印机也能搞事
- 苹果发布iOS/iPadOS 14.6第一个公测版本:更新内容未知
- 访问网站时出现Service Unavailable的解决方法
- L298N电机驱动模块的简单介绍
- 2021-11-21 使用for循环打印出大写字母ascll码对照表。
- cydia未能联到服务器,cydia无法加载,小编教你cydia无法加载怎么解决
- Android车牌识别SDK
- 方差 标准差_总体、样本、总体方差、样本方差、抽样方差和标准误
- 无语!35 岁华人程序员涉嫌诈骗 150 万美元抗疫贷款,在美国遭 FBI 逮捕
- 内存屏障 Memery Barrier
- 爬取电影天堂的最新电影
- Android肝帝战纪之网络请求框架封装(Retrofit的封装)
- 定时轮播Echarts造成内存泄漏致使浏览器崩溃问题
- 详细!!计划任务设置详细步骤
热门文章
- UVa12467 Secret Word(kmp)
- GDB调试器使用总结
- mount cifs出现cannot allocate memory解决方法
- redis为什么使用单线程 ,还那么快,单线程是怎么实现的
- Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决...
- 181102 Python环境搭建(安装Sublime Text3)
- [转] - 如何用QTcpSocket传送图片
- Microsoft Visual Studio Learning Pack 自动生成流程图插件(转)
- C++面试题--(五)
- git合并多个commit