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_BASE\ORACLE_HOME\odp.net\bin\找到我們安裝的東西,而且,當前的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:\Green\oracle11x86" />
        <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。client\dataSources\dataSource的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM