ODP.net是否支持另一个UDT中的UDT字段

时间:2015-08-17 09:54:06

标签: object odp.net user-defined-types

我的架构中有两个用户定义的类型:

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“无效的参数绑定”异常。除了参数名称和参数类型的正确性之外,我没有太多要检查。在发现它只是ODP.NET不支持另一个UDT中的UDT字段之前,我害怕浪费了大量的时间。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

虽然我无法说明真正的问题,但将OracleDataAccess.dll版本从2.xxx更改为4.xxx解决了这个问题。