无法加载文件或程序集' Oracle.DataAccess,Version = 4.112.4.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'

时间:2015-03-29 18:13:15

标签: c# .net oracle

我在服务器上安装了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();
                }
            }
        }
    }
}

6 个答案:

答案 0 :(得分:5)

好的,我将根据我对ODP.NET的经验建议以下内容:

您的系统正在尝试加载64位Oracle DLL,但由于应用程序在32位模式下运行,因此无法运行。尝试将应用程序设置为64位。或者,安装32位ODP.Net驱动程序,看看它们是否更好。

答案 1 :(得分:1)

前段时间有过类似的问题...... 在此处提到this问题:

尝试设置您的项目'平台目标'到' x86'而不是'任何CPU'。

希望这有帮助!

答案 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个条件:

  • 目标框架为4.0或更高
  • 架构必须是x64AnyCPU(如果是64位Windows,最有可能出现这种情况)
  • 您的PC和目标计算机上安装了64位Oracle客户端版本11.2

在此广告中找到更多信息:The provider is not compatible with the version of Oracle client

答案 5 :(得分:0)

这是我的解决方法:

安装包ODP.NET4-版本4.112.3