ODP.net是Oracle提供的数据库访问类库,其功能和效率上都有所保证,它还有一个非常方便特性:在客户端上,可以不用安装Oracle客户端,直接拷贝即可使用。

以下内容转载自:http://blog.ywxyn.com/index.php/archives/326

由于微软在.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 System;
using Oracle.DataAccess.Client; namespace NoOraClient
{
class Program
{
static void Main(string[] args)
{
//You need to enter a valid Oracle connection string, below is the format
string connectionString = "user id=USERID;password=PASSWORD;" +
"data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=IPorSERVERNAME)" +
"(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ValidSID)))"; using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = connectionString; try
{
connection.Open();
Console.WriteLine("Connection Successful!");
Console.ReadLine(); // stops the console from closing until you hit the ENTER key
}
catch (OracleException ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine(); // stops the console from closing until you hit the ENTER key
}
}
}
}
}

代码编写好以后,还要从下载的压缩包中取出几个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&gt;

之间就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" /&gt;

注:如果下载的不是ODTwithODAC1110720,有可能dll的位置不像是上面提到的那样,需要自己去挨个找了:(

以上为基本的使用方法,还有几点要注意的地方(部分内容转载自 http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html):

1:在上面列出的DLL中,其中Oracle.DataAccess.dll和OraOps11w.dll才是ODP.net对应的文件,其余的DLL均为OracleInstantClient对应的文件,ODP.net和InstantClient的版本必须一致,否则会发生错误,只要能保证版本正确,可以视需求另外下载OracleInstantClient(因为InstantClient分几个版本,BASIC,BASIC_LITE等),再将这几个DLL文件替换

2:各版本的ODTwithODAC包,其DLL位置都不相同,在新版本的包中,上面列出的DLL中,有些DLL已经去掉了(比如orannzsbb11.dll),而且Oracle.DataAccess.dll也根据.net的版本分为多个(以ODTwithODAC112030为例,其中包含2.x和4.0两个版本,分别对应vs2005与2010,开发时需要取用对应的包),使用时注意所取的DLL文件是否正确

3:对于连接字符串,上文中使用的是:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))(CONNECT_DATA=(SID=orcl)))
这个是比较典型的tnsname写法,除了这种写法外,ODP.net还支持将数据源简单地写为:[//]host[:port][/service_name]

例如,上文中的例子即可写成Data Souce=192.168.0.100:1527/orcl

此外,在这里也同样可以引用tnsnames.ora中配置好的连接(在本机装有Oracle的前提下),有两个方法:直接在程序中设置环境变量TNS_ADMIN,将其指向network\admin,或设置环境变量ORACLE_HOME,程序会自动去 %ORACLE_HOME%\network\admin下查找tnsnames.ora

4:进行数据库连接和查询修改之前,有一些环境变量的设置可能会影响到程序的运行结果,同时,如果本机以前已经安装过Oracle,它的一些设置也会影响到程序的运行,所以,在程序打开连接之前,可以视情况适当选用下面的一些环境变量,来保证程序运行结果的正确(注意这部分是从英文资料中转载过来的,有部分变量值对于中文环境来说可能会出现问题,请酌情修改)

.net中使用ODP.net访问Oracle数据库(无客户端部署方法)的更多相关文章

  1. .Net中使用ODP.net访问Oracle数据库

    ODP.Net是Oracle提供的数据库访问类库,其功能和效率上都有所保证,它还有一个非常方便特性:在客户端上,可以不用安装Oracle客户端,直接拷贝即可使用. .net framework4中会将 ...

  2. .net4.0中使用ODP.net访问Oracle数据库(无需安装oracle客户端部署方法)

    1.在没有安装oracle客户端的设备上也能访问服务器上的oracle (通俗的讲就是:开发的应用程序 和 oracle数据库服务器分别在两台电脑上)2.不需要配置TnsNames.Ora文件 开发环 ...

  3. sql server中使用链接服务器访问oracle数据库

    一.  安装配置oracle客户端 要访问orcale数据,必须在访问的客户端机器上安装oracle客户端. Orcale有两种形式的客户端: l         完整的客户端 包括访问服务器端数据库 ...

  4. ODP.NET 之访问 Oracle 数据库

    ODP.NET 之访问 Oracle 数据库 要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Da ...

  5. 【方法】如何限定IP访问Oracle数据库

    [方法]如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知 ...

  6. 在开发框架中扩展微软企业库,支持使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库

    在前面随笔<在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容3 ...

  7. 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动

    由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...

  8. .Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库

    .Net  Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库  , 一直报下面的错误 ORA-00604: error occurred at recursive SQL ...

  9. .net(C#)访问Oracle数据库的几种免安装组件的对比

    Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, OD ...

随机推荐

  1. JavaScript判断、循环、Map、Set

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结      一些判断条件                 JavaScript把null.undefined.0.NaN和空字符串''视为 ...

  2. 189. Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  3. CentOS_7.2安装Redis_3.0

    一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...

  4. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  5. Ingress 记萌新的第一次连多重(xjbl)

    之前为了升七,ArtanisWei学长告诉我可以去紫金园雕塑[这是什么地方啊],顺带靠卖萌骗了一桶key 于是屁颠屁颠的跑去按照群里攻略开始连多重[馒头 by handsomepeach],连了一百年 ...

  6. ASP.NET MVC为字段设置多语言显示 [转]

    这段时间一直在忙.NET的项目,今天就写一下关于.NET的文章吧,也很长时间没写过.NET的啦  在使用ASP.NET MVC3 的时候,使用元数据模式可以非常方便地设置每个 字段(或者说属性)以减少 ...

  7. PHP分页代码

       }            <a href="fenye.php?page=<?php echo  <?php  }    <a href="fenye ...

  8. HashMap 遍历

    Map<String, String> _map = new HashMap<String,String>(); 1.方法一 for (Entry<String, Str ...

  9. 用markdown学习写出总结

    # PS### 快捷键:CTRL+N(新建)CTRL+1. **切片**- 套索,磁性套索,椭圆,矩形选框.2. **印章** 仿制图章工具,图案图章工具3. 钢笔4. 油漆桶5. 吸管工具, *** ...

  10. RadioButtonList 属性设置

    RadioButtonList 属性里有RepeatDirection 设为Horizontal