Mav*_*ven 34 .net oracle oracle11g
当我的.Net应用程序尝试连接到oracle数据库时,我收到此错误.
错误说明了This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed..但我已经多次确定客户端安装x64不了32.
Date Time: 6/8/2014 10:57:55 AM: System.InvalidOperationException: Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at System.Data.Common.UnsafeNativeMethods.OCILobCopy2(IntPtr svchp, IntPtr errhp, IntPtr dst_locp, IntPtr src_locp, UInt64 amount, UInt64 dst_offset, UInt64 src_offset)
at System.Data.OracleClient.OCI.DetermineClientVersion()
--- End of inner exception stack trace ---
at System.Data.OracleClient.OCI.DetermineClientVersion()
at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
at System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OracleClient.OracleConnection.Open()
at CustomizedSetupInstaller.Runscripts.InitializeDBObjects(String connectionString, String dbProvider)
Run Code Online (Sandbox Code Playgroud)
Wer*_*eit 47
一种解决方案是在您的计算机上安装x86(32位)和x64 Oracle客户端,然后运行应用程序的架构无关紧要.
这是在一台机器上安装x86和x64 Oracle客户端的说明:
假设:调用Oracle Home OraClient11g_home1,客户端版本为11gR2
(可选)删除任何已安装的Oracle客户端(如果遇到问题,请参阅如何卸载/完全删除Oracle 11g(客户端)?)
例如,下载并安装Oracle x86客户端 C:\Oracle\11.2\Client_x86
将Oracle x64 Client下载并安装到不同的文件夹中,例如C:\Oracle\11.2\Client_x64
打开命令行工具,转到文件夹%WINDIR%\ System32,通常C:\Windows\System32创建一个指向ora112文件夹的符号链接C:\Oracle\11.2\Client_x64(参见下面的命令部分)
通常更改为文件夹%WINDIR%\ SysWOW64 C:\Windows\SysWOW64并创建指向ora112文件夹的符号链接C:\Oracle\11.2\Client_x86(参见下文)
修改PATH环境变量,更换喜欢的所有条目C:\Oracle\11.2\Client_x86,并C:\Oracle\11.2\Client_x64通过C:\Windows\System32\ora112,相应的其\bin子文件夹.注意:C:\Windows\SysWOW64\ora112不得在PATH环境中.
如果需要,请将ORACLE_HOME环境变量设置为C:\Windows\System32\ora112
打开注册表编辑器.将注册表值设置HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME为C:\Windows\System32\ora112
将注册表值设置HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME为C:\Windows\System32\ora112(不C:\Windows\SysWOW64\ora112)
你完成了!现在,您可以将x86和x64 Oracle客户端无缝连接在一起,即x86应用程序将加载x86库,x64应用程序将加载x64库,而无需对系统进行任何进一步修改.
例如,将TNS_ADMIN环境变量(TNS_ADMIN在Registry中的resp.条目)设置为公共位置可能是明智的选择TNS_ADMIN=C:\Oracle\Common\network.
用于创建符号链接的命令:
cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86
笔记:
两个符号链接必须具有相同的名称,例如ora112.
尽管其名称文件夹C:\Windows\System32包含x64库,但C:\Windows\SysWOW64包含x86(32位)库.不要混淆.
Dav*_*dRR 11
在我的情况下,甲骨文11.2 32位客户端 是安装在我的64位Windows 2008 R2操作系统.
我的解决方案:在分配给我的ASP.NET应用程序的应用程序池的高级设置中,我将启用32位应用程序设置为True.
请参阅下面的我用于测试连接到Oracle的能力的独立.ashx测试脚本.在更改应用程序池之前,它的响应是:
[Running as 64-bit] Connection failed.
Run Code Online (Sandbox Code Playgroud)
...并在应用程序池更改后:
[Running as 32-bit] Connection succeeded.
Run Code Online (Sandbox Code Playgroud)
TestOracle.ashx - 通过System.Data.OracleClient测试Oracle连接的脚本:
要使用:根据需要更改用户,密码和主机变量.
请注意,此脚本可以独立使用,而不会干扰ASP.NET Web应用程序项目文件.只需将其放入应用程序文件夹即可.
<%@ WebHandler Language="C#" Class="Handler1" %>
<%@ Assembly Name="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" %>
using System;
using System.Data.OracleClient;
using System.Web;
public class Handler1 : IHttpHandler
{
private static readonly string m_User = "USER";
private static readonly string m_Password = "PASSWORD";
private static readonly string m_Host = "HOST";
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string result = TestOracleConnection();
context.Response.Write(result);
}
public bool IsReusable
{
get { return false; }
}
private string TestOracleConnection()
{
string result = IntPtr.Size == 8 ?
"[Running as 64-bit]" : "[Running as 32-bit]";
try
{
string connString = String.Format(
"Data Source={0};Password={1};User ID={2};",
m_Host, m_User, m_Password);
OracleConnection oradb = new OracleConnection();
oradb.ConnectionString = connString;
oradb.Open();
oradb.Close();
result += " Connection succeeded.";
}
catch
{
result += " Connection failed.";
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我在Windows 10 PC上遇到了同样的问题.我将项目从旧计算机复制到新计算机(64位),并在新计算机上安装了Oracle Client 64位.我得到了同样的错误信息,但在尝试了许多解决方案后没有效果,实际上对我有用的是:在Visual Studio中(我的是2017年)转到工具>选项>项目和解决方案> Web项目
在该页面上,选中以下选项:使用64位版本的IIS Express for Websites and Projects
小智 5
修改IIS
评论:
平台:Windows Server 2008 R2 Enterprise - 64 位 - IIS 7.5