当前位置: 首页 > 知识库问答 >
问题:

Oracle 12c至11g

杜俭
2023-03-14

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

一周来,我一直在尝试调整我的应用程序,使之与oracle 11g配合使用,因为这个版本可以安装在我客户的计算机上,这正成为一项无望的任务。oracle 11g的ODBC没有oracle。ManagedDataAccess。包括dll和Oracle。DataAccess无法从我使用的存储过程中读取布尔数据类型。我要么修改我的所有过程,然后尝试修复与Oracle相关的所有问题。ManagedDataAccess。或从使用oracle 11g开发新应用程序开始。我在一个虚拟机上安装了32位windows 7,并且一直在使用它,从我的应用程序的一个非常小的版本开始,它我正在使用,但需要太多的时间!

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

我按照说明安装了packed,应用程序现在正在运行。唯一的问题是,我在添加Boolean类型的参数时出错,错误是:“Oracle”。数据访问。客户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定义,但找不到布尔的定义:

#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中使用相同的定义时,我对布尔值有一个定义:

#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,
}
}

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

共有1个答案

邴俊民
2023-03-14

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

我不能说我已经安装了Oracle 12c数据库,甚至也没有12c Oracle客户端,所以我不能说两者是否都需要32位客户端。我从NuGet获得了Oracle托管数据访问DLL,并且我通过在连接字符串中使用连接描述符而不是TNS名称来避免对Oracle客户端的需求。我不明白为什么您不能在您的应用程序中使用这种方法。

 类似资料:
  • 同样的规则也将应用于destination_num。表中的现有值需要替换为屏蔽值。我读过一些关于Oracle12c中数据编辑的文章,但提到了它,因为我们只能选择屏蔽数据,而不能选择更新。

  • 我正在从事一个大学项目,我打算使用oracle数据库作为后端,我选择使用django作为编程语言。我已成功地将django与oracle 12c连接,并已安装了cx_oracle。但是当我尝试运行命令时 出现以下错误。 Windows PowerShell版权所有(C)微软公司。版权所有。 PS C:\Users\Hp\Desktop\onlinepharma 上述异常是以下异常的直接原因: 回溯

  • 有一个包含表示某些点的类型列的表。稍后将执行像“显示距离x内的所有其他点”这样的空间查询。通过将一些数据泵送到导入表后,如果业务键仍然存在,我将在合并时将这些数据集带入基表。 我的应用程序是一个使用< code>hibernate 5.0.9、< code > hibernate-spatial 5 . 0 . 9 final 、Oracle12c数据库和hibernate.dialect的可执行

  • 我正在使用FFMPeg(版本FFMPeg-20170330-ad7aff0-win64-static)将RTSP转换为。m3u8。 命令是: ffmpeg-rtsp_传输tcp-i{rtsp}-c:v libx264-crf 35-预设超快-maxrate 3M-bufsize 300k-r 10-g 20-movflags faststart-tune zerolatency-hls_时间1-h

  • 如果我在512宽的SIMD向量中有以下双精度,例如在Xeon Phi寄存器中: 是否可以将其制成: 使用单个指令?此外,由于双打没有按位内部函数,这仍然是实现上述目标的有效方法吗?