【问题标题】:.NET Framework compatibility issue with Oracle Data Access.NET Framework 与 Oracle 数据访问的兼容性问题
【发布时间】:2016-02-26 20:57:08
【问题描述】:

我正在 Windows 10 和 Oracle 11g 上的 Visual Studio 2012 中处理 C# 项目。 为了连接我的 c# 项目,我必须安装 Oracle Data Access Components_ODTwithODAC121024 并且一切正常。

我将项目的目标 .NET 框架更新为 3.5,现在出现此错误:

无法加载文件或程序集“Oracle.DataAccess, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或其依赖项之一。试图加载格式不正确的程序。

经过长时间的搜索和测试,我认为这是由不兼容问题引起的。 我尝试通过程序和功能启用 .NET Framework 3.5 -> 打开或关闭 Windows 功能。

我尝试阅读参考并从

导入 Oracle.DataAccess.dll

C:\app\Samer\product\11.2.0\dbhome_1\ODP.NET\bin\2.x

我还使用了 Oracle 数据访问组件附带的 Oracle.DataAccess.dll

当我禁用处理 oracle 命令的方法时,我的项目工作正常。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Oracle.DataAccess;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace backup_Check_v01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        Read_const_File();
    }

    //Method for Reading Constants File
    public void Read_const_File()
    {
        string File_Path;
        File_Path = @"s:\test\result";
        Get_File_info(File_Path);
    }

    //Method for reading file information ex(File Name,Size,and creation date..etc)
    public void Get_File_info(string para1)
    { 
        FileInfo info = new FileInfo(para1);
        richTextBox1.AppendText(Environment.NewLine + "File Name: " + Path.GetFileNameWithoutExtension(info.Name));
        richTextBox1.AppendText(Environment.NewLine + "File Size (Bytes): " + info.Length.ToString());
        richTextBox1.AppendText(Environment.NewLine + "Creation Time: " + info.CreationTime.ToString());
        richTextBox1.AppendText(Environment.NewLine + "Last Access: " + info.LastAccessTime.ToString());
        richTextBox1.AppendText(Environment.NewLine + " **************************** ");

        search_for_string(para1);
    }

    public void search_for_string(string para2)
    {
        string keywords = "sb_0501_Thu.dmp";
        string oradb = "Data Source=sb_1901;User Id=sb_1901;Password=sb00;";

        StreamReader sr = new StreamReader(para2);
        richTextBox1.AppendText(Environment.NewLine + sr.ReadToEnd());

        if (!richTextBox1.Text.Contains(keywords))
        {
            OracleConnection conn = new OracleConnection(oradb);
            conn.Open();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "insert into backup_check(REC_ID,OFFICE_CODE,DUMP_NAME,DUMP_STATUS,SYSTEM,CHECK_DATE)values(null,null,'keywords',0,'SBank',sysdate)";
            int rowsupdated = cmd.ExecuteNonQuery();
            if (rowsupdated == 0)
            { MessageBox.Show("NONE"); }
            else
            { MessageBox.Show("Done"); }

            conn.Dispose();
        }
        else
        {
            OracleConnection conn = new OracleConnection(oradb);
            conn.Open();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "insert into backup_check(REC_ID,OFFICE_CODE,DUMP_NAME,DUMP_STATUS,SYSTEM,CHECK_DATE)values(null,null,'keywords',1,'SBank',sysdate)";
            int rowsupdated = cmd.ExecuteNonQuery();
            if (rowsupdated == 0)
            { MessageBox.Show("NONE"); }
            else
            { MessageBox.Show("Done"); }
            conn.Dispose();
        }
    }
}

}

【问题讨论】:

    标签: c# .net oracle visual-studio-2012 oracle11g


    【解决方案1】:

    您指的是 ODP.NET 版本 2.121.2.0。但您似乎已经安装了 Oracle 客户端 11.2。版本必须相互匹配(至少是主版本号)

    打开您的 *.csproj 文件并像这样设置 Oracle.DataAccess 的引用:

    <Reference Include="Oracle.DataAccess">
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    

    Version=...processorArchitecture=... 等属性不是必需的。您的应用程序将根据所选架构和目标 .NET 框架加载正确的 Oracle.DataAccess.dll

    【讨论】:

    • 正在构建的 MSIL 项目的处理器架构与参考 Oracle.DataAccess 版本=2.112.3.0 Culture=neutral PublicKeyToken=89b483f429c47342 processorArchitecture=x86""x86" 的处理器架构不匹配这种不匹配可能.....
    • 导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以使项目和参考之间的处理器架构保持一致,或者依赖与项目目标处理器架构匹配的处理器架构的参考
    • 是的,我尝试了所有可能的方法来避免这种不匹配,但我失败了,请带我离开以避免这种不匹配我已经下载并安装了 Oracle Data Access Components 11 并导入了表单 C:\app\ Samer\product\11.2.0\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll
    • 根据您的建议并安装 Oracle 数据访问组件后问题未解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多