我设计了一个连接到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名称。我不明白为什么你不能在你的应用中使用这种方法。