将数组参数从C#传递到表的Oracle集合类型

将数组参数从C#传递到表的Oracle集合类型,c#,asp.net,plsql,wcf-data-services,plsqldeveloper,C#,Asp.net,Plsql,Wcf Data Services,Plsqldeveloper,我在PLSQL规范中声明了一个集合表和记录 最终结算程序(贷款记录中的贷款记录tbl) 因此,我从C#page传递数组参数 使用上面的代码它不起作用,它获取的错误无法将类型为“System.Int32”的对象强制转换为类型为“System.Array”。贷款记录是一个数组参数。 听着,我使用的数据类型是OracleDbType.Int32是否正确,或者我必须定义其他数据类型。我在过程中将输入参数声明为Table我看到两个问题。首先,您使用的是PL/SQL定义的记录类型,而不是SQL定义的对象类型

我在PLSQL规范中声明了一个集合表和记录

最终结算程序(贷款记录中的贷款记录tbl)

因此,我从C#page传递数组参数

使用上面的代码它不起作用,它获取的错误
无法将类型为“System.Int32”的对象强制转换为类型为“System.Array”。贷款记录是一个数组参数。

听着,我使用的数据类型是
OracleDbType.Int32
是否正确,或者我必须定义其他数据类型。我在过程中将输入参数声明为Table

我看到两个问题。首先,您使用的是PL/SQL定义的记录类型,而不是SQL定义的对象类型。ODAC需要SQL定义的对象类型。其次,假设您已经定义了所有正确的SQL对象类型和C#自定义类型,那么在您的计算机上的ODP.NET软件堆栈中有一个很好的C#代码示例,可以使用数组绑定:%ODAC#u HOME%\ODP.NET\samples\4\AssocArray

         type loan_recov_rec is  record(v_prncpl_ed_cd number(3),v_prncpl_recov number   (7),v_int_ed_cd number(3),
     v_int_recov,number(5));



  type loan_recov_tbl is table of loan_recov_rec index by binary_integer;
 cmd.ArrayBindCount = v_loan_recov_tbl.Length;
                Oracle.DataAccess.Client.OracleParameter P_loan_recov = new Oracle.DataAccess.Client.OracleParameter("v_loan_recov_tbl", Oracle.DataAccess.Client.OracleDbType.Int32);
P_loan_recov.Direction = ParameterDirection.Input;

P_loan_recov.CollectionType = Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray;
P_loan_recov.Value = v_loan_recov_tbl;
cmd.Parameters.Add(P_loan_recov);