簡體   English   中英

Oracle.ManagedDataAccess.Core 3.21.61 使用 UDT Oracle 11g 和 c# .net 6

[英]Oracle.ManagedDataAccess.Core 3.21.61 using UDT Oracle 11g with c# .net 6

我目前正在將代碼從 .NET 4.5.1 升級到 .NET 6。目前正在研究數據庫功能。 在 .NET 4.5.1 中,我經常使用 Oracle UDT 作為輸入和輸出參數,沒有問題。 但是,對於我的一生,我無法讓它在 .NET 6 上工作。我使用的是 Oracle 11g 數據庫,我有點想/希望數據庫版本是問題,因為有一個 Oracle計划在未來幾個月內升級數據庫。 否則,我可能不得不延遲升級。

我認為我的代碼非常簡單。 UDTTypes 是在 Oracle 中定義的(並且在 .NET 4.5.1 中工作)從邏輯上講,這不應該是問題。 縮寫,它們看起來如下

create or replace TYPE "WBH_PLATELIST" IS TABLE OF WBH_PLATEOBJ;

create or replace TYPE "WBH_PLATEOBJ" AS OBJECT 
(
    LPID                VARCHAR2(15 BYTE),
    ITEM                VARCHAR2(50 BYTE)
    ...
)

我有一個帶有如下簽名的程序包,它工作得很好。

PROCEDURE GetInventoryPlates( p_CustId    IN varchar2,
                              p_Plate     OUT WBH_PLATELIST);

我正在使用 Oracle.ManagedDataAccess.Core v.3.21.61。 我的 C# 代碼看起來像

string packageProc = "WBH_DEVELOPMENT.GetInventoryPlates";

OracleParameter clientparam = new OracleParameter() 
{   ParameterName = "p_CustId",
    Direction = ParameterDirection.Input, 
    Value = "XZXXX" 
};
OracleParameter plateparam = new OracleParameter()
{
    ParameterName = "p_Plate",
    DbType = DbType.Object,
    OracleDbType = OracleDbType.Object,
    Direction = ParameterDirection.Output,
    UdtTypeName = "ALPS.WBH_PLATELIST",
};

try
{
    using (OracleConnection SqlCon = new OracleConnection(@"Data Source=x.x.x.x:xxx/test;User ID=xxx;Password=xxx"))
    {
        using (OracleCommand SqlCmd = new OracleCommand(packageProc, SqlCon))
        {
            if (paramList != null)
            {
                SqlCmd.BindByName = true;
                SqlCmd.Parameters.Add(clientparam);
                SqlCmd.Parameters.Add(plateparam);
            }
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.Connection.Open();
            SqlCmd.ExecuteNonQuery();
        }
    }
}
catch (OracleException ex)
{
    string log = ex.Message;

}

似乎無論我做什么,只要調用 ExecuteNonQuery 函數,我都會收到以下錯誤。

ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'GET_TYPE_SHAPE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

有人可以指出我正確的方向嗎? 謝謝。

我現在不記得來源了,但我很確定,我在某處看到,你需要有至少 12.1 的 DB 版本才能將 UDT 與托管驅動程序(正常和“核心”)一起使用。

暫無
暫無

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

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