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

  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/ensleep/p/4817173.html
Copyright © 2011-2022 走看看