2009-09-22 75 views
4

我正在使用.NET连接到Oracle 10g数据库的Excel Addin(VSTO)。如何在使用System.Data.OracleClient时指定要使用的Oracle主目录

我在Vista x64上运行,发现我需要安装在我的机器上的x86和x64 Oracle客户端,以便32位进程(如PL/SQL Developer)和64位进程(如示例为“任何CPU”编译的.NET控制台应用程序)可以连接到Oracle。

这一切都工作正常。我的问题是Excel是一个托管.NET DLL的32位应用程序,根据ProcessMonitor,excel进程在“C:\ oracle \ product \ 10.2.0 \ client_1 \ BIN \ oci”中加载“OraClient10g_home1”Oracle客户端。 DLL“(这恰好是64位客户端),当我的.NET代码尝试使用它时,会给我一个BadImageFormatException。我想要告诉.NET加载32位“OraClient10g_home2”Oracle客户端(即“C:\ oracle \ product \ 10.2.0 \ client_2 \ BIN \ oci.dll”)。我如何告诉.NET使用client_2而不是client_1。

回答

4

尝试更改HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ HOME \ ODP.NET中的DllPath。

+1

您也可以在app.config中更改它。 http://download.oracle.com/docs/html/E10927_01/InstallODP.htm – Christian13467

+0

这就是我最后做的 – d4nt

+0

你说你使用Microsoft提供的Oracle(System.Data.OracleClient)。我非常惊讶(至少可以这么说),设置这个特定于Oracle提供程序(Oracle.DataAccess)的参数应该可以解决您的问题。 – Mac

2

您可以:

+0

太好了。我如何告诉.NET使用即时客户端? – d4nt

+0

只需将它沿着您的应用程序发送:http://stackoverflow.com/questions/70602/what-is-the-minimum-client-footprint-required-to-connect-c-to-an-oracle-database – Mac

+1

这就是说我如何打包oracle客户端,但我们如何告诉.net使用我们的应用中包含的那些DLL,而不是安装在我的PC上的完整客户端。我没有看到如何使文件夹中的即时客户端改变.net使用的内容? – d4nt

相关问题