我的目标是能够使用我的 web.config 文件中的连接字符串从 IIS 7 中的 Windows Server 2008 上运行的 ASP.NET 应用程序读取 Oracle 数据库。请注意,我正在使用企业库 5 语法。从我读过的论坛中,它告诉我我需要 x64 版本的 Oracle 客户端。因为我有旧版 DLL 文件,所以我现在想以 x86 运行。这甚至可能吗?如果我将 x64 与 x86 DLL 文件一起引入,将会引入更多复杂性,但如果这是我唯一的选择,请告诉我如果无法将 Oracle 客户端作为 x86 运行,如何做到这一点。
我的应用程序在这一行抛出异常:
using (IDataReader dataReader = db.ExecuteReader(command))
例外:
尝试加载 Oracle 客户端库会引发 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时会出现此问题。
当我在 Visual Studio 2010 中右键单击该项目时,它显示我的平台设置为“活动(任何 CPU)”。平台目标设置为“x86”。
在 IIS 7(在 Windows Server 2008 上)中,我将启用 32 位应用程序属性(在我的网站应用程序池的高级设置下)设置为“真”。
Windows 环境变量“路径”具有“D:\oracle\product\11.1.0\client_1\bin;” 为 Oracle 路径设置。
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Data.SqlClient;
using System.Data.Odbc;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.ServiceLocation;
using System.Data.Common;
using Web.Controls.Shared;
using System.Data;
using System.Text;
...
static List<DWObject> GetOracleTables(string databaseGroup)
{
Database db = DatabaseFactory.CreateDatabase(databaseGroup);
StringBuilder getQuery = new StringBuilder
(@"select table_name from all_tables");
List<DWObject> objectList = new List<DWObject>();
DbCommand command = db.GetSqlStringCommand(getQuery.ToString());
// 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.
// It can't find a 64-bit version of the Oracle client libraries. This has nothing to do with the .NET framework, please contact Oracle for support.
using (IDataReader dataReader = db.ExecuteReader(command))
{
while (dataReader.Read())
{
if (dataReader["table_name"] != DBNull.Value)
{
DWObject dwo = new DWObject();
dwo.dwobject_name = dataReader["table_name"].ToString();
objectList.Add(dwo);
}
}
}
return objectList;
}
通过服务帐户的连接字符串:
<add name="TestDatabase" connectionString="server=xxx;Data Source=xxx;User ID=xxx;password=xxx;" providerName="System.Data.OracleClient" />
编辑 2015 年 7 月 17 日:
有趣的是,我在这里找到了自己的帖子。现在我得到了一个不同的错误。但我正在尝试相同的解决方案。
db.ExecuteNonQuery(dbCommand);
Microsoft.Practices.EnterpriseLibrary.Data.dll 中出现“System.Exception”类型的未处理异常
附加信息:System.Data.OracleClient 需要 Oracle 客户端软件版本 8.1.7 或更高版本。