尝试在C#中连接到Oracle DB时出现问题

时间:2018-11-01 13:43:10

标签: c# database oracle oracle11g

我正在尝试使用以下方法连接到Oracle数据库:

OracleConnection con = new OracleConnection();
con.ConnectionString = "User ID=ID;Password=PASSWORD;Data Source=SOURCE";
con.Open();
write("connected to oracle " + con.ServerVersion);

但是每次我运行程序时,都会出现错误:

  

[2018-11-01 09:29:19.705] System.BadImageFormatException:无法   加载文件或程序集'Oracle.DataAccess,Version = 2.112.1.0,   文化=中性,PublicKeyToken = PUBLIC_KEY'或其中之一   依赖性。试图加载不正确的程序   格式。文件名:“ Oracle.DataAccess,版本= 2.112.1.0,   文化=中立,PublicKeyToken = PUBLIC_KEY'   adrentech_previous_day.Program.processFile()在   adrentech_previous_day.Program.Main()在   目录\程序:行   25

     

===预绑定状态信息=== LOG:DisplayName = Oracle.DataAccess,版本= 2.112.1.0,Culture = neutral,   PublicKeyToken = PUBLIC_KEY(完全指定)LOG:Appbase =   文件:///目录   日志:初始PrivatePath = NULL调用程序集:   adrentech_previous_day,版本= 1.0.0.0,文化=中性,   PublicKeyToken =空。   === LOG:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:   目录\ program.vshost.exe.Config   日志:使用主机配置文件:日志:使用机器配置   来自的文件   C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config。   日志:政策后参考:Oracle.DataAccess,版本= 2.112.1.0,   文化=中性,PublicKeyToken = PUBLIC_KEY日志:尝试   下载新网址   文件:///DIRECTORY/Oracle.DataAccess.DLL。   ERR:无法完成装配的设置(hr = 0x8007000b)。探测   终止。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的编译目标很可能是.NET Framework 4.0(或更高版本),但是您安装了ODP.NET 2.x版-它们不能一起工作。

一个解决方案是使用ODP.NET托管驱动程序-您已经完成了。但是,还有其他解决方案,请参见The provider is not compatible with the version of Oracle client

现在,关于ORA-12154: TNS:could not resolve the connect identifier specified

的第二个问题

与非托管驱动程序相比,ODP.NET托管驱动程序使用不同的方法来查找sqlnet.oratnsnames.ora(和ldap.ora(如果使用的话))文件,请参见Determining location of relevant tnsnames.ora file < / p>

非托管驱动程序搜索文件夹%ORACLE_HOME%\network\admin并读取注册表项HKLM\SOFTWARE\ORACLE\KEY_OraClient11g_home1\TNS_ADMIN,而ODP.NET托管驱动程序则不。

ODP.NET托管驱动程序从您的.NET配置文件(即tnsnames.ora)中检索machine.config的位置。您可以手动修改文件(请参见Oracle Data Provider for .NET, Managed Driver Configuration)或使用以下批处理脚本(选择与您相关的x64或x86行,并根据您的计算机更改文件夹名称)

set Oracle_x64=c:\oracle\product\11.2\Client_x64\odp.net
set Oracle_x86=c:\oracle\product\11.2\Client_x86\odp.net

OraProvCfg_x64=%Oracle_x64%\bin\4\OraProvCfg.exe
OraProvCfg_x86=%Oracle_x86%\bin\4\OraProvCfg.exe

set TNS_ADMIN=C:\oracle\network\admin

"%OraProvCfg_x64%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%
"%OraProvCfg_x86%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x86%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%

或将TNS_ADMIN设置为在任何情况下均应起作用的环境变量。