2011年12月29日 星期四

Enterprise Library DAAB + Oracle:Provider 使用 ODP.NET


一般來說專案的資料庫如果是使用 Oracle,大部分的狀況下存取資料庫都會是使用 System.Data.OracleClient,但是在兩年多前微軟就已經宣布 System.Data.OracleClient 在 .NET 4.0 雖然還會支援這個型別,但是在未來的 .NET Framework 版本將會移除,在 .NET 4.0 之中會被標記為「Deprecated (已過時的)」

MSDN Blogs – ADO.NET team blog : System.Data.OracleClient Update

http://blogs.msdn.com/b/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx

黑暗執行緒 - System.Data.OracleClient將走入歷史

http://blog.darkthread.net/post-2010-05-14-bye-ado-net-oracleclient.aspx

雖然說現階段還是可以繼續使用 System.Data.OracleClient 於專案中而且編譯也沒有問題,但是就如黑暗大所說的,還是改用 Oracle 官方所提供的「ODP.NET from Oracle」,早期 Enterprise Library DataAccess Application Block (DAAB) 並無支援使用 ODP.NET,一直到了 EntLib 4.1 之後才有支援使用 ODP.NET,接下來本篇將會說明如何讓 Enterprise Library 5.0 DAAB 使用 ODP.NET 的設定方式。


Oracle – Developer Tools for Visual Studio

http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html?ssSourceSiteId=ocomen

image

Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio

http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

image

如果你有安裝之前ODAC的beta版,請務必要先移除後再安裝新的版本,詳細的安裝注意資訊:

Note: If an ODAC beta is installed, uninstall it before installing this ODAC release.

http://www.oracle.com/technetwork/topics/dotnet/downloads/install112030-1440546.html



Enterprise Library 5.0

在先前的文章介紹中是透過 NuGet 來加入 Enterprise Library 5.0 的參考,但是配置 EntLib 的設定還是使用 EntLib既有的工具,配置 EntLib 設定資料時有一個「Enterprise Library Configuration」的配置工具,而這個工具是必須去安裝 EntLib 5.0 後才會有,而且 Enterprise Library Configuration 會與 Visual Studio 整合,當滑鼠指向 *.Config 檔案按下右鍵就會有選想可以選擇使用,

image

Enterprise Library 5.0

下載安裝檔:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15104

image

下載「Enterprise Library 5.0.msi」安裝檔,如果有興趣研究 EntLib 的原始碼也可以下載Source Code(建議下載!)

另外也可以單獨安裝 「EnterpriseLibrary.Config」,這樣就可以不用安裝整個EntLib 5.0,

Visual Studio Gallery - EnterpriseLibrary.Config

http://visualstudiogallery.msdn.microsoft.com/029292f0-6e66-424f-8381-3454c8222f9a

image

安裝完成之後,開啟專案並且在Web.Config檔案按滑鼠右鍵,選單終究會出現「Edit Server configuration file

image

上圖裡會出現兩個可以設定 Configuration 的選項,是因為我的環境有安裝 Enterprise Library 5.msi 之外,也有安裝EnterpriseLibrary.Config,在 Visual Studio 中無論是啟用那一個 Configuration,都是一樣的介面與功能。

 



專案加入ODP.NET

首先要在專案中加入ODP.NET的參考(Oracle.DataAccess.dll)

加入參考

image

點選「Add Reference」視窗右下方的Browser Button

SNAGHTML136e8af

 

到這一個路徑的目錄中「C:\app\使用者名稱\product\11.2.0\client_1\odp.net\bin\」,看你的專案式使用哪一版的 .NET Framework,我的這一個範例專案是使用 .NET Framework 4.0 所以就使用 odp.net\bin\4 目錄下的「Oracle.DataAccess.dll

SNAGHTML13876f9

選擇之後回到「Add Reference」視窗中,點選「Add」讓專案加入參考

SNAGHTML13bafe4

image

 


設定Enterprise Library DAAB

於專案中的 Web.Conifig 檔案上按滑鼠右鍵,選單出現後點選「Edit Enterprise Library V5 Configuration」或另一個設定選項

image

接者會出現 Enterprise Library Cinfiguration視窗

SNAGHTML1447600

 

一、點選「Database Settings」左方的三角形圖示,展開Database Setting的設定區塊

二、接著點選「Database Instances」右方的加號,按下後就會出現「Add Database Connection String」的選項

image

 

點選「Add Database Connection String」選項後就會出現編輯連線字串的區塊,

SNAGHTML14b7065

輸入這個連接字串的名稱以及連接字串的內容

image

接下來選擇「Database Provider」,就選擇「Oracle.DataAccess.Client

image

 

接著點選「Database Settings」右方的雙箭頭圖示

image

點選圖示後會在下方展開一個區塊,這邊可以設定DAAB的一些屬性,這邊我們要設定的是「Default Database Instance

image

「Default Database Instance」選擇剛剛新增加的連線字串

image

這樣我們就做好了 Enterprise Library DAAB 的 Database Provider 使用 Oracle.DataAccess.Client 設定,在關閉 Enterprise Library Configuration 視窗之前要記得做儲存的動作,儲存完畢後就關閉設定視窗。

image

 

開啟 Web.Config 來看看內容,可以看到剛才使用 Enterprise Library Configuration 視窗設定的 Default Database 以及 Connection String 都已儲存在 Web.Config 之中,

image

 



程式中的使用

有使用到存取資料庫的檔案要先 using Oracle.DataAccess.Client

image

而在Method裡面的用法就沒有太大的變化,有關EntLib DAAB 存取資料庫的使用,可以參考之前的文章:

簡述 Oracle + Enterprise Library 5.0 Data Access Application Block 的操作

http://kevintsengtw.blogspot.com/2011/12/oracle-enterprise-library-50-data.html

 

Oracle.DataAccess.Client 與原本 .NET Framework內建的 System.Data.OracleClient 有一個比較顯而易見的不同就是在使用OracleParameter時所使用的DbType型別,

 

有關比較詳盡的ODP.NET於程式中使用方式,就會另外再寫一篇文章來做介紹。

 


參考連結:

MSDN - Oracle 和 ADO.NET

http://msdn.microsoft.com/zh-tw/library/77d8yct7.aspx

MSDN - System.Data.OracleClient 命名空間

http://msdn.microsoft.com/zh-tw/library/system.data.oracleclient.aspx

Christian Shay - Microsoft Deprecates OracleClient: Time to Consider Moving to ODP.NET

http://cshay.blogspot.com/2009/07/microsoft-deprecates-oracleclient-time.html

 

以上

2 則留言:

  1. Hi,前幾天向您請教的DAAB+ODP.NET綁定變數順序問題找到答案了,Oracle官網:You can bind variables by position or by name by setting the OracleCommand
    property BindByName (which defaults to false). ODP.NET默認只與順序有關,與變數名稱無要求,謝謝您給予的建議及回覆

    回覆刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。