我看过一些帖子说Oracle 11g Client(适用于Windows)适用于高达9.2的数据库。但是,如果客户端有时连接到11g,有时连接到10g数据库,它仍然可以工作吗?我的问题是:连接到10g和11g数据库时,有什么不同的配置吗?
有些人告诉我GAC的政策。
谢谢!
答案 0 :(得分:8)
使用较新的客户端驱动程序连接到较旧的Oracle数据库通常没有问题,例如使用12g客户端连接到10g或11g数据库。答案的其余部分属于技术问题,如果在执行程序的计算机上已经安装了Oracle客户端,则可能会出现在.Net程序中。
2014年更新:
与此同时,Oracle已经为Oracle数据库发布了一个托管的.Net驱动程序。因此,不是安装本地Oracle客户端或与您的应用程序一起提供Instant Client,首选方法应该是仅提供托管驱动程序而不依赖于本地配置。然后,您可以轻松安装客户端,GAC,Oracle数据库版本等。您可以从the Oracle website下载托管驱动程序。
以前的答案,如果您无法使用托管驱动程序,仍然需要:
如果您不知道客户端工作站上是否安装了Oracle客户端,则会出现问题。如果您正在谈论GAC 我认为,您不知道是否安装了Oracle客户端,如果安装了,那么是哪个版本。
如果您不想依赖已安装的Oracle客户端,则可以使用.Net应用程序提供Oracle Instant Client。例如,您可以下载ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio,它为您的开发人员工作站提供Oracle客户端安装(Visual Studio支持DataSet开发和EntityFramework)以及即时客户端所需的所有文件。
对于即时客户端,您需要以下文件(在ODAC安装的子文件夹中搜索它们):
此外,Windows目录中还需要以下.dll文件:
只需复制应用程序工作目录中的所有文件(.exe文件所在的位置)。
现在该如何属于GAC?
如果客户端计算机上安装了Oracle客户端,则GAC中还会有 Oracle.DataAccess.dll 。此外,有可能安装了一个策略,其中包含以下内容:您的程序引用的 Oracle.DataAccess.dll 的独立内容, Oracle.DataAccess.dll 版本您的GAC将始终使用。如果您安装上面链接的ODAC,您会在
下找到该文件C:\的Windows \ Microsoft.NET \组件\ GAC_32 \ Policy.4.112.Oracle.DataAccess \ v4.0_4.112.3.0__89b483f429c47342
结果是,如果您尝试加载Oracle.DataAccess.dll(如“提供程序不兼容......”之类的错误消息),则.Net应用程序始终会抛出异常,如果客户端计算机具有安装的另一个版本的Oracle Client 11,而不是您在应用程序中引用的版本。
要解决此问题,您可以配置app.conf,以便忽略发布者策略并始终加载您的版本:
<configuration>
...
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:1)
我在使用JAVA或.Net时没有遇到任何问题。事实上,Oracle表示完全没问题:
该版本包含Oracle数据库客户端11.2.0.3,可以 访问Oracle Database 9.2及更高版本。 Oracle支持实体 使用Microsoft Visual Studio 2010和.NET的Framework和LINQ 框架4,包括实体框架4.1和4.2。 Code First不是 本版本支持。
显然,您希望在连接到每个进程时测试相同的进程,并通过您自己的测试进行验证,但我认为您会没事的。