.NET Framework 与 Oracle Data Access 的兼容性问题
本文关键字:兼容性 问题 Access Data Framework Oracle NET | 更新日期: 2023-09-27 18:36:25
我正在Windows 10和Oracle 11g上的Visual Studio 2012中处理一个C#项目。为了连接我的 c# 项目,我必须安装 Oracle Data Access Components_ODTwithODAC121024
并且一切正常。
我将项目的目标 .NET 框架更新为 3.5,现在出现此错误:
无法加载文件或程序集"Oracle.DataAccess,版本=2.121.2.0,区域性=中性,公钥令牌=89b483f429c47342"或其依赖项之一。尝试加载格式不正确的程序。
经过长时间的搜索和测试,我认为这是由不兼容问题引起的。我尝试通过程序和功能启用.NET Framework 3.5 ->打开或关闭Windows功能。
我尝试从中读取引用并导入 Oracle.DataAccess.dll
C:''app''Samer''product''11.2.0''dbhome_1''ODP.NET''bin''2.x
我还使用了Oracle.DataAccess.dll它附带了Oracle数据访问组件
。当我禁用处理 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();
}
}
}
}
您指的是 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