一般來說專案的資料庫如果是使用 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
Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
如果你有安裝之前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 檔案按下右鍵就會有選想可以選擇使用,
Enterprise Library 5.0
下載安裝檔:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15104
下載「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
安裝完成之後,開啟專案並且在Web.Config檔案按滑鼠右鍵,選單終究會出現「Edit Server configuration file」
上圖裡會出現兩個可以設定 Configuration 的選項,是因為我的環境有安裝 Enterprise Library 5.msi 之外,也有安裝EnterpriseLibrary.Config,在 Visual Studio 中無論是啟用那一個 Configuration,都是一樣的介面與功能。
專案加入ODP.NET
首先要在專案中加入ODP.NET的參考(Oracle.DataAccess.dll)
加入參考
點選「Add Reference」視窗右下方的Browser Button
到這一個路徑的目錄中「C:\app\使用者名稱\product\11.2.0\client_1\odp.net\bin\」,看你的專案式使用哪一版的 .NET Framework,我的這一個範例專案是使用 .NET Framework 4.0 所以就使用 odp.net\bin\4 目錄下的「Oracle.DataAccess.dll」
選擇之後回到「Add Reference」視窗中,點選「Add」讓專案加入參考
設定Enterprise Library DAAB
於專案中的 Web.Conifig 檔案上按滑鼠右鍵,選單出現後點選「Edit Enterprise Library V5 Configuration」或另一個設定選項
接者會出現 Enterprise Library Cinfiguration視窗
一、點選「Database Settings」左方的三角形圖示,展開Database Setting的設定區塊
二、接著點選「Database Instances」右方的加號,按下後就會出現「Add Database Connection String」的選項
點選「Add Database Connection String」選項後就會出現編輯連線字串的區塊,
輸入這個連接字串的名稱以及連接字串的內容
接下來選擇「Database Provider」,就選擇「Oracle.DataAccess.Client」
接著點選「Database Settings」右方的雙箭頭圖示
點選圖示後會在下方展開一個區塊,這邊可以設定DAAB的一些屬性,這邊我們要設定的是「Default Database Instance」
「Default Database Instance」選擇剛剛新增加的連線字串
這樣我們就做好了 Enterprise Library DAAB 的 Database Provider 使用 Oracle.DataAccess.Client 設定,在關閉 Enterprise Library Configuration 視窗之前要記得做儲存的動作,儲存完畢後就關閉設定視窗。
開啟 Web.Config 來看看內容,可以看到剛才使用 Enterprise Library Configuration 視窗設定的 Default Database 以及 Connection String 都已儲存在 Web.Config 之中,
程式中的使用
有使用到存取資料庫的檔案要先 using Oracle.DataAccess.Client
而在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型別,
- 當 using System.Data.OracleClient 時 DbType 為 OracleType,
MSDN Oracle 資料型別對應 - http://msdn.microsoft.com/zh-tw/library/yk72thhd.aspx
- 而 using Oracle.DataAccess.Client 時 DbType 為 OracelDbType,
OracleDbType Enumeration - http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm
有關比較詳盡的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
以上
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默認只與順序有關,與變數名稱無要求,謝謝您給予的建議及回覆
感謝你的資訊!
刪除