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

时间:2012-12-21 12:31:47

标签: c# asp.net plsql wcf-data-services plsqldeveloper

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

         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;
     

程序pr_final_settlement(loan_recov_tbl中的v_loan_recov_tbl);

所以,我从C#page

传递Array参数
 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);

使用上面的代码它不起作用它得到错误Unable to cast object of type 'System.Int32' to type 'System.Array'. v_loan_recov_tbl is an Array Parameter. 听到,我使用数据类型为OracleDbType.Int32是正确的还是我必须解析其他数据类型。我在过程中声明输入参数如表

1 个答案:

答案 0 :(得分:1)

我看到两个问题。首先,您使用的是PL / SQL定义的记录类型,而不是SQL定义的对象类型。 ODAC想要SQL定义的对象类型。其次,假设您已经定义了所有正确的SQL定义的对象类型和C#自定义类型,那么在您的机器上的ODP.NET软件堆栈中使用c#代码就可以使用数组绑定:%ODAC_HOME%\ odp.net \样品\ 4 \ AssocArray。