【问题标题】:How to validate prerequisite for ODP and Oracle Client connection如何验证 ODP 和 Oracle 客户端连接的先决条件
【发布时间】:2010-07-22 07:07:54
【问题描述】:

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

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

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

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

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

提前致谢!

【问题讨论】:

    标签: oracle odp.net oracleclient


    【解决方案1】:

    您可以使用 .Net 中的 DataProvider 工厂类。这将显示您当前的 .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 的第一个版本)。

    【讨论】:

    • 你的帖子怎么了?
    • 我更新了链接并将代码包含在我的答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2014-06-15
    相关资源
    最近更新 更多