錯誤:找不到請求的 .Net Framework Data Provider。可能沒有安裝.


一.錯誤描述

今天在幫同事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為例:

1、下載完成后,將其解壓到某個目錄,比如D:\oracle11g\ODP.Net,cmd下鍵入命令:
D:\oracle11g\ODP.Net\x64>install.bat all c:\odp.net myhome (install all components)
上述命令將自動把所有文件復制到c:\odp.net下
2、然后轉到c:\odp.net下,鍵入命令:
c:\odp.net>configure.bat all myhome (configure all component)
將自動向GAC中部署相應的程序集.
 

四.Oracle Data Provider的配置

安裝了過后,你可以在對應的.NetFramework版本下查看machine.config里面的<system.data><DbProviderFactories>節點,如果沒有,你可以在這個節點下添加.
<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"/>

版本信息什么的,要與你前面安裝的保持一致.

也可以在你的應用程序下的webconfig下面的<system.data><DbProviderFactories>節點添加上述信息.推薦在machine中添加,這樣使用相應版本的.NetFramework下的應用程序就不用單獨再一一配置了.
 

五.使用Oracle Data Provider提供的程序集

現在可以打開你的VS,添加Oracle Data Provider(ODP.Net)提供的程序集Oracle.DataAccess.dll了.
現在,可以使用這個Oracle提供的DLL來訪問Oracle數據庫了.前面的問題也迎刃而解.其他不同類型的數據庫也可以按照這個思路來解決.
 

參考文檔

http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html

 


免責聲明!

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



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