簡體   English   中英

Oracle 12c至11g

[英]Oracle 12c to 11g

我設計了一個連接到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

更新:

我按照說明安裝了打包程序,並且該應用程序現在正在運行。 唯一的問題是,添加布爾類型的參數時出現錯誤,錯誤是:'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,
}
}

除了修改所有過程並替換所有布爾變量之外,還有其他解決方案嗎?

您可以使用Oracle托管數據訪問DLL與11g數據庫進行通信。 我現在有一個生產應用程序正在執行此操作。

我不能說我已經安裝了Oracle 12c數據庫,甚至還沒有安裝12c Oracle客戶端,所以我不能說是否都需要32位客戶端。 我從NuGet獲得了Oracle托管數據訪問DLL,並且通過在連接字符串中使用連接描述符而不是TNS名稱來避免使用Oracle客戶端。 我不明白為什么您不能在您的應用程序中使用這種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM