如果你的機器上安裝了odp.net,且確信machine.config也有類似以下結節:(64位+.net 4.0環境下,machine.config可能會有4份,分別對應於.net2.0/4.0的32/64位版本,要每個都檢查過去哦)
<
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=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</
DbProviderFactories
>
|
4.0的machine.config中類似下面這樣:
|
1
2
3
|
<
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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</
DbProviderFactories
>
|
如果碰巧您又在用64位的操作系統(比如win2008 r2),開發工具又是最先進的vs.net 2010 sp1,但是死活在代碼就是連接不上oracle,一直報一些奇怪的錯誤:比如“Data Provider找不到”啦,“Oracle.DataAccess.Client無法加載”啦之類,正在一籌莫展大聲咆哮:“天理,有木有啊,有木有!”之時,恭喜你,多半是遇到了x64/x64的版本問題。
odp.net安裝后,默認會在GAC中部署程序集Oracle.DataAccess,如果你安裝的是x86版本,GAC中的就是x86;如果你安裝的x64版本,GAC中的就是AMD64版本。
檢測本機GAC中是否有Oracle.DataAccess程序集並查看版本的方法如下:
在vs.net命名行窗口下,輸入gacutil.exe /l Oracle.DataAccess
如果看到類似下面的結果:
D:\app\x86\Microsoft Visual Studio 10.0\VC>gacutil.exe /l Oracle.DataAccess
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Oracle.DataAccess, Version= 2.112.2.0 , Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Oracle.DataAccess, Version= 2.112.2.0 , Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Number of items = 4
表明你的機器上安裝了4個版本的Oracle.DataAccess,分別對應於.net 2.0以及.net 4.0的32位/64位版本
而且在C:\Windows\assembly 目錄下也能看到x86與AMD64位
注:在資源管理器里,只能看到2.112.2.0的x86/AMD64版本,看不到4.112.2.0版本的任何東東(不知道是不是我的個別現象,也有可能另外的版本在其它地方,我沒找到)
如果缺少相關的版本,可以先到oracle官網download,下面以64位odp.net為例:
我客戶端安裝的是Oracle 11 32位客戶端,如果64位開發程序使用32位的Oracle.DataAccess.dll會報如標題異常.
所以我要下載64位的ODP.net(ODAC112040Xcopy_64bit.zip)
1、下載完成后,將其解壓到某個目錄,比如E:\software\oracle11g\ODP.Net,然后鍵入以下
cmd的dos命令:
E:\software\oracle11g\ODP.Net\x64>install.bat all c:\odp.net myhome (install all components)
上述命令將自動把所有文件復制到c:\odp.net下
E:\software\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)
c:\odp.net>configure.bat all myhome (configure all component)
將自動向GAC中部署相應的程序集.
然后在vs2010里,添加引用時,應該就能看到Oracle.DataAccess的二個版本
貼一段示例代碼:
總之一句話:要跑64位的.Net程序,就必須用64位的odp.net,要跑32位的.Net程序,就必須用32位的odp.net,且machine.config中要有相應的provider節點。
最后給出odp.net32位與64位的下載地址:
64位下載地址
32位下載地址
參考閱讀
http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html

