zoukankan      html  css  js  c++  java
  • Oracle Data Provider for .NET的使用(托管与非托管(一))

    简单的概述

    ODP.NET的含义是 Oracle Data Provider for .NET的简写。

    简单的使用

    下面的例子是一个简单的C#命令行程序,它实现了最基本简单的使用ODP访问Oracle数据的功能。

    ///使用非托管代码工具访问,此方法与引用System.Data.OracleClient非常相似,但是性能要比后者好很多。
    using System; 
    using Oracle.DataAccess.Client;
     
    class Sample
    {
      static void Main()
      { 
        // Connect to Oracle
        string constr = "User Id=scott;Password=tiger;Data Source=oracle";
        OracleConnection con = new OracleConnection(constr);
        con.Open();
     
        // Display Version Number
        Console.WriteLine("Connected to Oracle " + con.ServerVersion); 
     
        // Close and Dispose OracleConnection
        con.Close();
        con.Dispose();
      }
    }
    
    ///这是使用非托管代码的访问,可以编译成anycpu的目标平台。
    using System;
    using Oracle.ManagedDataAccess.Client;
    using Oracle.ManagedDataAccess.Types;
     
    namespace Connect
    {
      class Program
      {
        static void Main(string[] args)
        {
          try
          {
            // Please replace the connection string attribute settings
            string constr = "user id=scott;password=tiger;data source=oracle";
     
            OracleConnection con = new OracleConnection(constr);
            con.Open();
            Console.WriteLine("Connected to Oracle Database {0}", con.ServerVersion);
            con.Dispose();
     
            Console.WriteLine("Press RETURN to exit.");
            Console.ReadLine();
          }
          catch (Exception ex)
          {
            Console.WriteLine("Error : {0}", ex);
          }
        }
      }
    }
    

    非托管系统要求

    • 操作系统
      • 32位WINDOWS7+的系统
        • 可以使用32-BIT ODP.NET
      • 64位WINDOWS7+系统
        • 可以使用32-BIT ODP.NET或者64-BIT ODP.NET
    • .NET版本
      • ODP.NET FOR .NET2.0只能在.NET 3.5SP1+上使用
      • ODP.NET FOR .NET4.0 只能在.NET4.0 4.5 4.5.1 4.5.2 4.6(目前测试了这些)上使用
    • ORACLE
      • 服务器软件版本:oracle10g release2 +
      • 客户端(Oracle Client)12.1[注:此软件将会随着ODP.NET一起安装,如果你下载了ODP.NET之后执行安装的话]

    托管驱动系统要求

    • 操作系统,与非托管相同,操作系统位数不受限制,可以编译成AnyCpu,在32位和64位平台上自动选择执行。
    • .NET版本,目前只有4.0版本,与非托管的4.0版本要求相同
    • ORACLE,与非托管相同

    其它的注意事项

    • 使用了自动提升事务分布式事务的应用程序,需要安装Oracle Services for Microsoft Transaction Server 12.1,ODP.NET只为分布式事务提供读写隔离级别(隔离级别)的支持。
      • 非托管驱动需要Oracle Services for Microsoft Transaction Server 来支持获取、提交、恢复的服务
      • 托管驱动只需要Oracle Services for Microsoft Transaction Server 来支持恢复的服务,获取和提交的服务已经由托管驱动提供。

    ENTITY FRAMEWORK(以下简称EF)系统要求

    实现EF的db first、Model First要求:

    • ODP.NET 11.2.0.3以上
    • .NET 4.0+
      如果要使用vs的工具,需要使用vs2010以上肯安装Oracle Developer Tools for Visual Studio。

    ODP.NET版本说明

    从11.2.0.1.2开始,ODP.NET非托管驱动包含两个DLL集合,一个支持.NET2.0一个支持.NET4.0以上,托管驱动则只支持.NET 4.0及以上。

    安装ODP.NET

    安装非托管驱动

    • ODP.NET其实也是ODAC的一部分,ODAC可以从ORACLE官网下载,从ODAC11.1.0.6.20开始,ODP.NET可以通过XCOPY或者安装器来安装。
      • XCopy
        • 管理员通常使用XCopy来为为数众多的机器部署ODP.NET。在安装和配置期间,XCopy显得比安装器要小而且透明。
      • 使用安装器安装
        • 开发者或者管理员使用oracle通用安装器来自动安装ODP.NET,它包含了XCopy中所没有的文档和示例代码。

    使用安装器安装(OUI)

    在安装的时候,ODP.NET的动态帮助会自动安装到vs中,以支持在线帮助。通过动态帮助功能,用户可以通过F1来时刻获得Oracle的帮助以及查询相关文档。
    ODP.NET会在machine.

    config文件中创建一个对象,来使得所有的应用可以使用oracleClientFactory类,这也同时让DbProviderFactories类识另ODP.NET。

    ODP.NET非托管驱动的EF6和CodeFirst功能,可以通过NuGet来获得,OUI和XCOPY也包含了这些包,但是,需要一些外加的配置步骤。NUGET会自动完成这些步骤[除了连接字符串的设置,大哥这个你也不愿意让它设置吧]。

    安装完成以后,我们可以在ORACLE_BASEORACLE_HOMEodp.netin找到我们安装的东西,而且,当前的GAC中会被添加ODP.NET的DLL,这保证了以前的应用程序也可以随便使用更新过的ODP.NET。当然,如果不想这样,则应该去GAC中将这些DLL移除。

    XCOPY的安装方式

    安装前需知:

    • 确保zip中的所有文件都没有被OUI安装过

    • 在完成文件的解压后,此产品必须立即进行安装然后使用install_odpm.bat来配置
      安装步骤:
      1、下载ODP.NET的托管zip包。
      2、解压zip包,并将其放至你想要安装的地方(注意,它将永远待在那里,我们称为base目录),base目录中出现两个文件夹,ODP.NET是放非托管驱动文件的;network是放ORA文件的。
      4、执行Instal_odpm.bat来安装和配置ODP.NET托管驱动:

      注意:请使用管理员权限来运行odpm文件

    dopm语法:install_dopm.bat Oracle主目录 目标平台 机器范围配置
    目标平台:X86,X64,或者两个都写,即both.
    机器范围配置:true或者false.
    如果机器位宽配置选择了true,则会将驱动添加到GAC中。如果选择false,那么将不会修改MACHINE.CONFIG(修改MACHINE.CONFIG的作用是将驱动添加到GAC)。

    如果dll未引用至GAC,那么需要在应用程序的CONFIG的文件中进行相关的配置(包括:configSections,DbproviderFactories以及Provider的具体的相关配置等),应用程序才可以使用ODP.NET。同时,此情况下,由于新的ODP.NET更新,必须要手动修改应用程序的bin目录中的DLL文件。

    托管驱动卸载

    在base目录中执行uninstall_odpm.bat文件,参数与安装时执行install_odpm.bat相同.

    非托管驱动绿色配置

    安装完成以后,我们发现,在machine.config中多出了如下的配置

      <configSections>
        <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
      </configSections>
      <system.data>
        <DbProviderFactories>
          <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.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        </DbProviderFactories>
      </system.data>
        <oracle.manageddataaccess.client>
        <version number="*">
          <settings>
            <setting name="TNS_ADMIN" value="D:Greenoracle11x86" />
            <setting name="TraceOption" value="1"/>
            <setting name="PerformanceCounters" value="0" />
          </settings>
        </version>
      </oracle.manageddataaccess.client>
    

    我们只需要在我们的应用程序config文件中加入以上配置,然后引用Oracle.ManagedDataAccess.dll这个文件。

    需要注意的是,通过此方法可以配置TNS_ADMIN路径,即TNS文件所在的目录

    TNS解析的时候寻找的规则是:

    1、在oracle.manageddataaccess。clientdataSourcesdataSource的alieas属性相等的节点的descriptor属性值。

    2、在.NET CONFIG配置中name为TNS_ADMIN的settings的值所指定的目录中寻找tnsnames.ora文件。

    3、在.exe文件所在的目录中寻找tnsnames.ora文件。

    4、由系统环境变量所指定的变量TNS_ADMIN所指定的目录中寻找tnsnames.ora文件(由测试发现,未找到官方说明)。

    **需要特别说明的是:在IIS承载的web系统中,如果在系统环境变量中设置了TNS_ADMIN变量,那么,必须要在应用程序池中设置这个应用程序池的属性“是否允许加载用户配置”为true

    补充:好多人在使用的时候,会发现,带参数的请求有时候可以正确执行,有时候不可以,经过查询,终于找到了答案:
    问题源于System.Data.OracleClient中,默认绑定的变量是按照名称来绑定的,而在ODP中,则默认是按照顺序来绑定的,所以,出现参数匹配错乱的情况,这里,只需要给Command.BindByName = true;即可。

    转-载请注明原地址:http://www.cnblogs.com/ensleep/p/4817173.html

  • 相关阅读:
    余额宝数据架构阅读
    VS提示This function or variable may be unsafe,The POSIX name for this item is deprecated
    VS中新建QT空项目找不到头文件的问题
    指针
    循环for do while continue break,达夫设备
    GUI程序弹出控制台打印输出信息
    ctime、chrono以及所有和时间有关的内容
    python安装
    文件:fstream,FILE,CFile,filesystem,以及路径目录
    C++异常处理、Dump文件、断言、静态断言、日志文件
  • 原文地址:https://www.cnblogs.com/ensleep/p/4817173.html
Copyright © 2011-2022 走看看