我正在使用Visual Studio 2012(64位)和oracle 11g(64位)。当我去连接oracle数据库时发生以下错误。
尝试加载Oracle客户端库会引发BadImageFormatException。 使用32位在64位模式下运行时会发生此问题 安装了Oracle客户端组件。
我花了很多次来解决这个问题。但是没有这样做。
示例代码
using System;
using System.Data;
using System.Data.OracleClient; //Add This
namespace Oracle_database
{
class Program
{
static void Main(string[] args)
{
OracleConnection con = new OracleConnection();
//using connection string attributes to connect to Oracle Database
con.ConnectionString = "User Id=abc;Password=12345;Data Source=ORCL";
con.Open();
DateTime fromDate = DateTime.Now.AddDays(-760);
DateTime toDate = DateTime.Now.AddDays(-760);
string sd = fromDate.Year + fromDate.Month.ToString("00") + fromDate.Day.ToString("00");
string ed = toDate.Year + toDate.Month.ToString("00") + toDate.Day.ToString("00");
var cmd = new OracleCommand();
cmd.CommandText = String.Format("Select E.c_Date, E.c_Time, E.l_UID, E.l_TID from tEnter E where E.c_Date>='{0}' and E.c_Date<='{1}'", sd, ed);
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
if (!reader.HasRows) continue;
if (reader[2].ToString() == "-1") continue;
}
// Close and Dispose OracleConnection object
con.Close();
con.Dispose();
Console.WriteLine("Disconnected");
}
}
}
你能帮帮我吗?
答案 0 :(得分:1)
Visual Studio是一个32位应用程序,不存在64位版本。它取决于编译器设置中的目标体系结构,需要32或64位Oracle客户端。
然后,名称空间System.Data.OracleClient
已成为deprecated多年,您不应该使用它。请改用driver from Oracle。
看看这个答案,我提供了一些细节: The provider is not compatible with the version of Oracle client
更多评论:
使用后应关闭/处置OracleDataReader
。
使用绑定变量而不是硬编码字符串:
cmd.CommandText = "Select E.c_Date, E.c_Time, E.l_UID, E.l_TID from tEnter E where E.c_Date>= :sd and E.c_Date<= :ed";
cmd.Parameters.Add("sd", OracleDbType.Date, ParameterDirection.Input).Value = fromDate;
cmd.Parameters.Add("ed", OracleDbType.Date, ParameterDirection.Input).Value = toDate;
然后您也不必关心任何ToString()
方法。