ODP.net 是否支持另一个 UDT 中的 UDT 字段
Does ODP.net support UDT field inside another UDT
我的架构中有两个用户定义类型:
create or replace
TYPE CITIZEN
AS
OBJECT
(
PIN VARCHAR2(7 CHAR),
LNAME VARCHAR2(30 CHAR) ,
FNAME VARCHAR2(30 CHAR),
.....)
create or replace
TYPE INW_DOC
AS
OBJECT
(
CITIZEN DOKCENTRA.CITIZEN,
SUBJECTID NUMBER(2,0),
CONCERNED_FIELD NUMBER(1,0),
APPTYPE NUMBER(2,0),
REMARKS VARCHAR2(1000 CHAR),
......)
我使用 ODP.NET Visual Studio 工具生成了相应的 类。使用下面的代码,我尝试执行一个存储过程,该过程接受一个 INW_DOC
:
类型的输入参数
OracleConnection con= new OracleConnection(connectionString);
OracleCommand cmd=con.CreateCommand();
cmd.CommandText="PKG$DOCS.SAVE_DOC";
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter param = new OracleParameter();
param.ParameterName = "V_INW_DOC";
param.UdtTypeName = "MySchema.INW_DOC";
param.OracleDbType = OracleDbType.Object;
param.Value = GetNewInwDoc();
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
我收到 ArgumentException "Invalid parameter binding" 异常。除了参数名称和参数类型的正确性之外,我没有太多要检查的。我担心在意识到 ODP.NET 不支持另一个 UDT 中的 UDT 字段之前已经浪费了大量时间。有什么想法吗?
虽然我无法说明真正的问题,但将 OracleDataAccess.dll 版本从 2.xxx 更改为 4.xxx 解决了问题。
我的架构中有两个用户定义类型:
create or replace
TYPE CITIZEN
AS
OBJECT
(
PIN VARCHAR2(7 CHAR),
LNAME VARCHAR2(30 CHAR) ,
FNAME VARCHAR2(30 CHAR),
.....)
create or replace
TYPE INW_DOC
AS
OBJECT
(
CITIZEN DOKCENTRA.CITIZEN,
SUBJECTID NUMBER(2,0),
CONCERNED_FIELD NUMBER(1,0),
APPTYPE NUMBER(2,0),
REMARKS VARCHAR2(1000 CHAR),
......)
我使用 ODP.NET Visual Studio 工具生成了相应的 类。使用下面的代码,我尝试执行一个存储过程,该过程接受一个 INW_DOC
:
OracleConnection con= new OracleConnection(connectionString);
OracleCommand cmd=con.CreateCommand();
cmd.CommandText="PKG$DOCS.SAVE_DOC";
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter param = new OracleParameter();
param.ParameterName = "V_INW_DOC";
param.UdtTypeName = "MySchema.INW_DOC";
param.OracleDbType = OracleDbType.Object;
param.Value = GetNewInwDoc();
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
我收到 ArgumentException "Invalid parameter binding" 异常。除了参数名称和参数类型的正确性之外,我没有太多要检查的。我担心在意识到 ODP.NET 不支持另一个 UDT 中的 UDT 字段之前已经浪费了大量时间。有什么想法吗?
虽然我无法说明真正的问题,但将 OracleDataAccess.dll 版本从 2.xxx 更改为 4.xxx 解决了问题。