我的架构中有两个用户定义的类型:
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字段之前,我害怕浪费了大量的时间。有什么想法吗?
答案 0 :(得分:0)
虽然我无法说明真正的问题,但将OracleDataAccess.dll版本从2.xxx更改为4.xxx解决了这个问题。