一.錯誤描述
今天在幫同事Debug的時候遇到這個問題,錯誤信息提示到是Data Provider的問題,首先我們看下環境.
數據庫版本:Oracle 11.2.0.4.0 64位
數據庫服務器:linux
應用服務器:32位windows
IIS:IIS7
.NetFramework:4.0
猜測到是沒有安裝.Net Framework的版本對應的Data Provider,查看web.config下面的節點:
<system.data> <DbProviderFactories> </DbProviderFactories> </system.data>
並沒有發現這里配置了DataProvider.
我們去對應版本的.NetFramework安裝目錄下的machine.config下去找這個結點
我的安裝目錄是:
也沒有發現DataProvider配置.
到目前為止,我們就可以確定,是config里面少了配置項,現在我們來為.NetFramework添加Oracle提供的相應版本的Data Provider.
二.查看是否有相應的Data Provider
首先,確定我們系統上已有的Data Provider,因為我用的數據庫是Oracle,所以我的Data Provider是Oracle提供的,Oracle的安裝目錄里可以查看到,我的是:
其中目錄中的odp.net就是 Oracle Data Provider for .Net的縮寫.
2.x是.NetFramwork 2.0版本的Data Provider(直到.NetFramework4以下,.NetFramwork3.0和.NetFramwork3.5只是加了不同的組件,但內核都是2.0)
4是.NetFramwork 2.0版本的Data Provider
它們是通過Oracle.DataAccess.dll來提供服務的.我們可以通過在vs.net命名行窗口下用gacutil.exe /l Oracle.DataAccess命令來查看安裝的odp.net版本.
顯示我已經安裝了兩個版本的Oracle Data Provider.
也可以通過在C:\Windows\assembly目錄下查看Oracle.DataAccess.dll的程序集版本,處理器平台等特性.但有一個問題,我的本機查不到4.0版本的Oracle.DataAccess.dll安裝信息.
但生產環境能查到,如下所示:
程序集的版本是10.2.0.100.
三.Oracle Data Provider的安裝
如果沒有對應的ODP.Net,需要自行安裝,怎么知道你需要哪個類型哪個版本的ODP.Net呢?
這里有兩個原則
1..Net應用程序與ODP.Net處理器類型保持一致,如:IIS的應用程序池是64位,那么ODP.Net的版本也要是64位的;
2..Net應用的.NetFramework版本與ODP.Net的版本也要保持一致.
下載地址(總攬):http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
64位ODP.Net下載地址:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
32位ODP.Net下載地址:http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html
注意下載的時候,跟你的數據庫版本保持一致.
以安64位ODP.Net為例:
D:\oracle11g\ODP.Net\x64>install.bat all c:\odp.net myhome (install all components)
上述命令將自動把所有文件復制到c:\odp.net下
c:\odp.net>configure.bat all myhome (configure all component)
四.Oracle Data Provider的配置
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
版本信息什么的,要與你前面安裝的保持一致.
五.使用Oracle Data Provider提供的程序集

參考文檔