我在.Net上有一个非常简单的应用程序,它使用ODP连接到Oracle.DataAccess (用Oracle.DataAccess dll 10.2编译)。我想检查“连接先决条件”(应用程序将能够连接到DB),然后才能在其他计算机上安装此应用程序?
如何检查目标主机上是否安装了ODP.NET版本10.2或更高版本(注册表检查不是enopugh)?
我知道我可以在注册表中检查ODP条目,但这不会检查Oracle客户端和客户机与ODP之间的兼容性。另外,如果ODAC XCopy安装安装了ODP -注册表可能不会被新的ODP条目更新。如果我正在计算机上安装DB,则不能单独安装Oracle客户端。
还有一个问题:当我尝试从安装中运行"test connection“方法时,该方法在计算机上使用引用的dll,它只有ODAC (与ODP) 11,--”Oracle.DataAccess.Client.OracleConnection..cctor()“错误消息抛出了Oracle.DataAccess.Client.OracleException提供程序与Oracle.DataAccess.Client.OracleConnection..cctor()”客户端版本不兼容( ODAC 10.2和11的策略都存在于GAC (程序集)中,指向来自ODP 2xbin的Oracle.DataAccess 11 )。
因此,如何检查和检查哪些组件,以确保安装了ODP和Oracle的适当版本,并将连接应用程序?
预先谢谢你!
发布于 2011-08-23 04:11:22
您可以从DataProvider使用.Net工厂类。这将显示当前.Net安装/处理可用的所有数据提供程序。我在这里有一篇关于如何做的博文。我设置它是为了防止我们的用户使用.Net 4.0不支持的版本。
http://blog.tsells.com/2011/05/12/oracle-11g-release-2-and-net-framework-4-0-and-version-checking/
我最近发现,Oracle4.0框架在11.2.0.2之前不支持任何版本的Oracle for .net .Net。(有关详细信息,请参阅支持的配置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的第一个版本)。
https://stackoverflow.com/questions/3306521
复制相似问题