我设计了一个连接到 oracle 12c 服务器的 windows 窗体应用程序。一切都很好,直到我发现客户端是 32 位操作系统,而 oracle c 只能安装在 64 位操作系统上。
我已经尝试了一周来调整我的应用程序以与 oracle 11g 一起使用,因为这个版本可以安装在我客户的计算机上,这正在成为一项无望的任务。oracle 11g 的 ODBC 不包含 Oracle.ManagedDataAccess.dll,而且 Oracle.DataAccess 无法从我正在使用的存储过程中读取布尔数据类型。我要么必须修改所有程序,并尝试修复与 Oracle.ManagedDataAccess.dll 相关的所有问题,要么首先使用 oracle 11g 开发新应用程序。我在虚拟机上安装了 32 位的 windows 7 并一直在使用它,从我的应用程序的一个非常小的版本开始,它可以工作,但需要太多时间!
- 是否有更快的方法或解决方案使我的应用程序与 oracle 11g 兼容?
- oracle 11g 真的比 oracle 12c 更适合弱小的计算机吗?(如果我设法说服客户安装 64 位操作系统并重新安装他正在使用的所有程序):客户有 2GB 的 RAM
更新 :
我按照说明安装了packed,应用程序现在正在运行。唯一的问题是我在添加布尔类型的参数时出错,错误是:“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:\Users\Jad-HP\Desktop\Windows Application\WindowsFormsApplication1\WindowsFormsApplication1\Form5.cs 44 53 WindowsFormsApplication1
我去了 OracleDbType 定义,找不到 Boolean 的定义:
#region Assembly Oracle.DataAccess.dll, v2.111.7.20
// C:\app\Jad-HP\product\11.1.0\client_2\ODP.NET\bin\2.x\Oracle.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,
}
}
尽管在我使用 oracle 12c 开发的 Visual Studio 中使用相同的定义时,我对 Boolean 有一个定义:
#region Assembly Oracle.DataAccess.dll, v4.121.1.0
// D:\app\Jad-HP\product\12.1.0\client_2\ODP.NET\bin\4\Oracle.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,
}
}
除了修改所有程序并替换所有布尔变量之外,还有其他解决方案吗?