如何验证ODP和Oracle客户端连接的先决条件

时间:2010-07-22 07:07:55

标签: oracle odp.net oracleclient

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

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

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

还有一个问题:当我尝试从安装运行“测试连接”方法时,在机器上使用引用的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客户端,并且应用程序将被连接?

提前谢谢!

1 个答案:

答案 0 :(得分: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之前的任何版本的Oracle Provider for .Net都不支持.net 4.0框架。 (有关详细信息,请参阅oracle支持部门的Oracle Data Provider for .NET(ODP)支持的配置[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版本)。