2

我在 .Net 上有一个非常简单的应用程序,它使用 ODP 连接到 Oracle(使用 Oracle.DataAccess dll 10.2 编译)。我想在其他计算机上安装此应用程序之前检查“连接先决条件”(应用程序将能够连接到数据库)?

如何检查目标主机上是否安装了 ODP.NET 版本 10.2 或更高版本(注册表检查不足)?

我知道我可以检查注册表中的 ODP 条目——但这不会检查 Oracle 客户端以及客户端与 ODP 之间的兼容性。此外,如果 ODP 是通过 ODAC XCopy 安装安装的 - 新 ODP 条目可能不会更新注册表。并且-如果我在计算机上安装,则安装了数据库,则不能单独安装 Oracle 客户端。

还有一个问题:当我尝试从安装中运行“测试连接”方法时,该方法在机器上使用引用的 dll,只有 ODAC(带 ODP)11,-“Oracle.DataAccess.Client.OracleException 提供程序不兼容Oracle.DataAccess.Client.OracleConnection..cctor() 中的 Oracle.DataAccess.Client.OracleInit.Initialize() 的 Oracle 客户端版本”引发错误消息(GAC 中存在 ODAC 10.2 和 11 的策略(程序集) ,从 ODP 2x bin 指向 Oracle.DataAccess 11)。

那么,我可以检查哪些组件以及如何检查以确保安装了适当版本的 ODP 和 Oracle 客户端并连接了应用程序?

先感谢您!

4

1 回答 1

0

您可以使用 .Net 中的 DataProvider Factory 类。这将显示您当前的 .Net 安装/进程可用的所有数据提供程序。我在这里有一篇关于如何做的博客文章。我设置它是为了防止我们的用户使用 .Net 4.0 不支持的 Oracle 版本。

http://blog.tsells.com/2011/05/12/oracle-11g-release-2-and-net-framework-4-0-and-version-checking/

我最近发现 Oracle 在 11.2.0.2 之前的任何版本的 .Net 的 Oracle Provider 都不支持 .net 4.0 框架。(有关更多详细信息,请参阅 oracle 支持的 Oracle Data Provider for .NET (ODP) Supported Configurations [ID 726240.1])。

由于以前的版本(10.2、11.1、11.2.0.1)有效,因此我需要一种方法来防止最终用户使用错误的版本。我在网上搜索并找不到任何能够做到这一点的人,所以我做了一些挖掘。经过一些测试,我想出了以下代码。

 System.Data.Common.DbProviderFactory factory =
                    System.Data.Common.DbProviderFactories.GetFactory("Oracle.DataAccess.Client");

                if (factory == null)
                    return false;

                Type t = factory.GetType();

                int majorversion = t.Assembly.GetName().Version.Major;

                // Do not allow any major versions less than 4
                if (majorversion < 4)
                    return false;

此代码将使用与您正在使用的 .net 框架版本注册的相同数据提供程序。这可确保您不会在您的环境中脱离接收器,并允许您检查已安装的 dll 的版本。对于这个例子——我只是检查 ODP 是否为 4.0 或更高(.net 4 的 odp 的第一个版本)。

于 2011-08-23T04:11:22.927 回答