Oracle 12c to 11g



我设计了一个连接到oracle 12c服务器的windows窗体应用程序。一切都很好,直到我发现客户端是32位的操作系统,而oracle c只能安装在64位的操作系统上。

我已经尝试了一个星期,使我的应用程序与oracle 11g一起工作,因为这个版本可以安装在我的客户的计算机上,这是一个无望的任务。ODBC for oracle 11g没有包含oracle . manageddataaccess .dll,也没有包含oracle。DataAccess无法从我正在使用的存储过程中读取布尔数据类型。我要么修改我的所有程序,并试图解决与oracle . manageddataaccess .dll相关的所有问题,要么开始使用oracle 11g开发一个新的应用程序。我在一台虚拟机上安装了windows 7 32位,并一直在使用它,从我的应用程序的一个非常小的版本开始,它可以工作,但是需要太多的时间!

  • 是否有更快的方法或解决方案使我的应用程序与oracle 11g兼容?
  • oracle 11g真的比oracle 12c更适合弱和有限的计算机吗?(如果我设法说服客户安装64位操作系统并重新安装他正在使用的所有程序):客户端有2GB RAM
<标题>更新:

我按照指示安装了包,应用程序现在正在运行。唯一的问题是,我有一个错误时,添加布尔类型的参数,错误是:'Oracle.DataAccess.Client。OracleDbType'不包含布尔值的定义

这是我用来调用过程的代码:

tring constr = "DATA SOURCE=localhost;PASSWORD=kidzclubadministration;PERSIST SECURITY INFO=True;USER ID=C##KidzClub";
OracleConnection con = new OracleConnection(constr);   
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "get_admin_pass";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("pass", OracleDbType.NVarchar2);
cmd.Parameters["pass"].Direction = ParameterDirection.Input;
cmd.Parameters["pass"].Value = password;
cmd.Parameters.Add("done", OracleDbType.Boolean);
cmd.Parameters["done"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();

确切的错误句子是:

Error   2   'Oracle.DataAccess.Client.OracleDbType' does not contain a definition for 'Boolean' C:UsersJad-HPDesktopWindows ApplicationWindowsFormsApplication1WindowsFormsApplication1Form5.cs  44  53  WindowsFormsApplication1

我去OracleDbType定义,找不到布尔值的定义:

#region Assembly Oracle.DataAccess.dll, v2.111.7.20
// C:appJad-HPproduct11.1.0client_2ODP.NETbin2.xOracle.DataAccess.dll
#endregion
using System;
namespace Oracle.DataAccess.Client
{
public enum OracleDbType
{
    BFile = 101,
    Blob = 102,
    Byte = 103,
    Char = 104,
    Clob = 105,
    Date = 106,
    Decimal = 107,
    Double = 108,
    Long = 109,
    LongRaw = 110,
    Int16 = 111,
    Int32 = 112,
    Int64 = 113,
    IntervalDS = 114,
    IntervalYM = 115,
    NClob = 116,
    NChar = 117,
    NVarchar2 = 119,
    Raw = 120,
    RefCursor = 121,
    Single = 122,
    TimeStamp = 123,
    TimeStampLTZ = 124,
    TimeStampTZ = 125,
    Varchar2 = 126,
    XmlType = 127,
    Array = 128,
    Object = 129,
    Ref = 130,
    BinaryDouble = 132,
    BinaryFloat = 133,
}
}

虽然当我在Visual studio中使用oracle 12c开发时,我有一个布尔值的定义:

#region Assembly Oracle.DataAccess.dll, v4.121.1.0
// D:appJad-HPproduct12.1.0client_2ODP.NETbin4Oracle.DataAccess.dll
#endregion
using System;
namespace Oracle.DataAccess.Client
{
public enum OracleDbType
{
    BFile = 101,
    Blob = 102,
    Byte = 103,
    Char = 104,
    Clob = 105,
    Date = 106,
    Decimal = 107,
    Double = 108,
    Long = 109,
    LongRaw = 110,
    Int16 = 111,
    Int32 = 112,
    Int64 = 113,
    IntervalDS = 114,
    IntervalYM = 115,
    NClob = 116,
    NChar = 117,
    NVarchar2 = 119,
    Raw = 120,
    RefCursor = 121,
    Single = 122,
    TimeStamp = 123,
    TimeStampLTZ = 124,
    TimeStampTZ = 125,
    Varchar2 = 126,
    XmlType = 127,
    Array = 128,
    Object = 129,
    Ref = 130,
    BinaryDouble = 132,
    BinaryFloat = 133,
    Boolean = 134,
}
}

除了修改所有过程和替换所有布尔变量之外,还有其他解决方案吗?

您可以使用Oracle托管数据访问DLL与11g数据库对话。我现在在生产中有一个应用程序可以这样做。

我不能说我已经安装了Oracle 12c数据库,甚至也没有安装12c Oracle客户端,所以我不能说是否需要32位客户端。我得到了Oracle管理数据访问DLL从NuGet,我避免了需要一个Oracle客户端通过使用连接描述符,而不是在连接字符串的TNS名称。我不明白为什么你不能在你的应用中使用这种方法。

相关内容

  • 没有找到相关文章

最新更新