我正在尝试使用以下方法连接到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)。探测 终止。
有什么建议吗?
答案 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.ora
和tnsnames.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
设置为在任何情况下均应起作用的环境变量。