我在服务器上安装了oracle 11 g r 2 ,我下载了ODAC112040Xcopy_64bit
并安装了.net组件。
我将此位置Oracle.DataAccess.dll
中存在的Oracle_Folder\odp.net\bin\4
复制到Visual Studio项目中的bin
文件夹
当我执行我的代码时,我遇到了这个例外:
未处理的类型' System.BadImageFormatException'发生在TestOracleConnection.exe
中其他信息:无法加载文件或程序集' Oracle.DataAccess,Version = 4.112.4.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其中一个依赖项。试图加载格式不正确的程序。
我的代码是:
public string CallCardDetails(string CallCardNo)
{
//initialize
using (DataSet ds = new DataSet())
{
//connect
using (OracleConnection conn = new OracleConnection("User Id=oraDB;Password=ora;Data Source=CCT"))
{
// Oracle uses : for parameters, not @
string query = "SELECT idcard from CallCardTable where idcard= :pCallCardNo";
// Let the using block dispose of your OracleCommand
using (OracleCommand cmd = new OracleCommand(query, conn))
{
// Note: be careful with AddWithValue: if there's a mismatch between the .NET datatype of
// CallCardNo and the idcard column you could have an issue. Cast the value you provide
// here to whatever is closest to your database type (String for VARCHAR2, DateTime for DATE, Decimal for NUMBER, etc.)
cmd.Parameters.Add(":pCallCardNo", CallCardNo);
conn.Open();
// Again, wrap disposables in a using or use try/catch/finally (using will dispose of things in case of exceptions too)
using (OracleDataAdapter dA = new OracleDataAdapter(cmd))
{
dA.Fill(ds);
return ds.GetXml();
}
}
}
}
}
答案 0 :(得分:5)
好的,我将根据我对ODP.NET的经验建议以下内容:
您的系统正在尝试加载64位Oracle DLL,但由于应用程序在32位模式下运行,因此无法运行。尝试将应用程序设置为64位。或者,安装32位ODP.Net驱动程序,看看它们是否更好。
答案 1 :(得分:1)
答案 2 :(得分:1)
我通常使用ODP.net的NuGet包,它们工作正常。你可以找到它们here。
这就是构建解决方案所需的全部内容,您无需安装任何驱动程序。
答案 3 :(得分:0)
检查dll的目标框架和项目是否匹配。您发布的文件位置显示您从Oracle_Folder \ odp.net \ bin \ 4中获取了4个版本的bin文件夹。看看bin \ 4.5中是否有req dll可能是你需要的。如果您将dll添加到目标框架不匹配的项目中,也会发生此异常 另外,在将dll放入bin文件夹之前清理解决方案。 :)
答案 4 :(得分:0)
要使用适用于.NET的Oracle Data Prover(ODP.NET)版本4.112.4.0,必须满足以下64个条件:
x64
或AnyCPU
(如果是64位Windows,最有可能出现这种情况)在此广告中找到更多信息:The provider is not compatible with the version of Oracle client
答案 5 :(得分:0)
这是我的解决方法:
安装包ODP.NET4-版本4.112.3