[英]Getting IDs back from an Oracle query using .net core and Oracle.ManagedDataAccess.Core
[英]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.