【问题标题】:Oracle.ManagedDataAccess.Core 3.21.61 using UDT Oracle 11g with c# .net 6Oracle.ManagedDataAccess.Core 3.21.61 使用 UDT Oracle 11g 和 c# .net 6
【发布时间】:2022-06-21 19:48:45
【问题描述】:

我目前正在将代码从 .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

有人可以指出我正确的方向吗?谢谢。

【问题讨论】:

    标签: c# oracle user-defined-types


    【解决方案1】:

    我现在不记得来源了,但我很确定,我在某个地方看到过,您需要拥有至少 12.1 版的 DB 才能将 UDT 与托管驱动程序(普通驱动程序和“核心”)一起使用。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2017-05-25
      • 2018-01-27
      • 2011-08-21
      • 2011-07-08
      • 2013-02-25
      相关资源
      最近更新 更多