由于微软在.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相关推荐

  1. ODP.NET连接池性能计数器

    ODP.NET连接池性能计数器 作者:范俊   2013-05-25 阅读本文需要了解两个知识: 1.  Oracle Data Provider for .NET(ODP.NET) --ORACLE ...

  2. net oracle连接池配置,Oracle ODP.NET连接池

    数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...

  3. 远程连接server问题

    开启Windows防火墙后,当远程连接Server服务器时被拒绝,其解决方法如下: 1.启动Windows防火墙.开始 > 设置 > 控制面板 > Windows防火墙.缺省情况下, ...

  4. VB连接Sql Server,Oracle,SyBase,Access数据库操作实例

    - VB连接数据库是常用的操作 对于小型数据的存取是非常不错的.在设计时 对于不同数据的连接方式都不同 这里使用了ADODB连接字符串的方式来访问常见的数据库:Sql Server,Oracle,Sy ...

  5. MobaXterm的SOCKS代理连接与bitvise client 软件的C2S与S2C连接

    1.MobaXterm的SOCKS代理连接的一种使用场景 远程两台Linux服务器,外网服务器和内网服务器,外网服务器有内外网ip,内网服务器不提供外网ip 外网服务器外网ip为100.100.100 ...

  6. Odp.Net 连接Oracle

    1.C#连接Oracle可以不安装客户端,但是需要借助Odp.net 免安装Oracle客户端: 将5个Oracle客户端的类库文件提取出来,放到程序根目录下,分别是oci.dll.Oracle.Da ...

  7. VS连接上oracle数据库,VS2015连接Oracle数据库的详细步骤

    开发环境 宿主机:Win10 + VS2015 + ODP.Net for VS2015 虚拟机:Win7 + Oracle 11g + 桥接 配置ODP.Net 首先下载 Oracle Develo ...

  8. DataStage8.7连接远程Oracle数据库

    ♣参考资料: http://www-01.ibm.com/support/docview.wss?uid=swg21441132 http://space.itpub.net/6126/viewspa ...

  9. sql 链接到oracle数据库,通过MSSQL连接服务器连接至Oracle数据库

    前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...

最新文章

  1. 浅谈单片机中变量访问的互斥
  2. 步步为营-77-Ajax简介
  3. 信号转化java_Java基础知识回顾-7
  4. 记录下kaggle比赛经验
  5. 【白皮书分享】2020用户生命周期运营白皮书2.0.pdf(附下载链接)
  6. oracle中的自增关键字,Oracle中设置自增字段
  7. 用 Mac 制作手写签名,没打印机也能搞事
  8. 苹果发布iOS/iPadOS 14.6第一个公测版本:更新内容未知
  9. 访问网站时出现Service Unavailable的解决方法
  10. L298N电机驱动模块的简单介绍
  11. 2021-11-21 使用for循环打印出大写字母ascll码对照表。
  12. cydia未能联到服务器,cydia无法加载,小编教你cydia无法加载怎么解决
  13. Android车牌识别SDK
  14. 方差 标准差_总体、样本、总体方差、样本方差、抽样方差和标准误
  15. 无语!35 岁华人程序员涉嫌诈骗 150 万美元抗疫贷款,在美国遭 FBI 逮捕
  16. 内存屏障 Memery Barrier
  17. 爬取电影天堂的最新电影
  18. Android肝帝战纪之网络请求框架封装(Retrofit的封装)
  19. 定时轮播Echarts造成内存泄漏致使浏览器崩溃问题
  20. 详细!!计划任务设置详细步骤

热门文章

  1. UVa12467 Secret Word(kmp)
  2. GDB调试器使用总结
  3. mount cifs出现cannot allocate memory解决方法
  4. redis为什么使用单线程 ,还那么快,单线程是怎么实现的
  5. Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决...
  6. 181102 Python环境搭建(安装Sublime Text3)
  7. [转] - 如何用QTcpSocket传送图片
  8. Microsoft Visual Studio Learning Pack 自动生成流程图插件(转)
  9. C++面试题--(五)
  10. git合并多个commit