未安装Oracle客户端的服务器上,使用ASP.NET远程链接Oracle

公司服务器一直都是使用 .NET+SQLSERVER的开发方式,有个项目须要进行读取远程Oracle的需求。因为oracle 基本不会,也是一边作一遍摸索。html

首先是使用工具测试是否已经联通,由于以前用mysql时都是用的Navicat,因此直接在网上下载了Navicat for Oracle,可是死活都连不上,报试过网上全部的方法,下载inistallclient ,修改OCI,加入环境变量,新建tnsnames.ora都没用,一直是Cannot load OCI DLL,126错误,也试过把Navicat与oracle client以及服务器的版本所有统一,照样报错,最后下载Oracle 官方的sqldeveloper,一次成功,话说仍是java的牛逼啊。SQLDeveloper 下载地址java

 

接着,使用ADO.NET开始作Oracle链接,发布到服务器上,结果报错 System.Data.OracleClient须要Oracle客户端软件版本8.1.7或更高版本。 试过网上的方案:mysql

1.安装inistallclient 新建环境变量 ,不行web

2.web.config 链接直接写成     <add name="ClientOracle" providerName="System.Data.OracleClient" connectionString="Password=XXXX;User ID=XXXX;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" /> 仍是不行sql

3.将oci.dll等4个dll放到System32文件夹下 仍是不行服务器

4.安装了Oracle 11g 彻底版,依旧不行oracle

5.使用ODBC方式进行链接,仍是不行。。。(试的64位,32位没试)tcp

最后的最后,使用Visual Studio Nuget下载安装Oracle.ManagedDataAccess包才成功,并且此包只须要一个DLL和web.config的配置,不须要oracle 客户端。ide

在生成的web.config中工具

<configSections>
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </configSections>
<connectionStrings>
<add name="OracleDataAccess"
             connectionString="DATA SOURCE=SampleDataSource;PERSIST SECURITY INFO=True;USER ID=XXXX;Password=XXXX;"
             providerName="Oracle.ManagedDataAccess.Client" />
  </connectionStrings>
<system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XXXX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>

只须要修改标红的部分,就能够正常使用ADO.NET的方式进行链接了,在建立连接时使用 new Oracle.ManagedDataAccess.Client.OracleConnection(strConn)进行。

另外过去经常使用的Oracle.DataAccess(ODP.NET),走的是Unmanaged,须要oci.dll程序库,所以还须要安装Oracle Client,并且32位与64位版本是有区分的,Oracle.DataAccess.dll执行时须要存取Oracle客户端档案,还要排除NTFS权限问题,Path环境变量等问题,比较繁琐。

而Managed ODP.NET 不须要安装Oracle Client 只须要一个Oracle.ManagedDataAccess.dll就能够,并且是Any CPU 没必要再为32位/64位苦恼

虽然此技术早已推出,可是仍是给oracle新手们一个帮助吧

相关文章
相关标签/搜索