C#学习教程:在过程参数中对OracleUDT的无效绑定以下是类型的定义:createtypenum_listastableofnumber;以及程序的定义:createorreplaceproceduremy_procedure(listofnumbersnum_list,v_valuechar)isbeginupdatemy_tablesetmy_column=v_valuewheremy_row_idin(selectcolumn_valuefromtable(listofnumbers));结尾;使用ODP.NET和C#,我将其声明如下:varrow_ids=newint[]{1,2};使用(varoracleConn=newOracle.DataAccess.Client.OracleConnection(myConnectionString)){oracleConn.Open();varcmd=newOracle.DataAccess.Client.OracleCommand("my_procedure",oracleConn);cmd.CommandType=CommandType.StoredProcedure;varparam1=newOracle.DataAccess.Client.OracleParameter("listofnumbers",Oracle.DataAccess.Client.OracleDbType.Array,ParameterDirection.Input);param1.CollectionType=Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray;param1.UdtTypeName="num_list";param1.Value=row_ids;cmd.Parameters.Add(param1);varparam2=newOracle.DataAccess.Client.OracleParameter("v_value",Oracle.DataAccess.Client.OracleDbType.Char,ParameterDirection.Input);param2.Value="Y";cmd.Parameters.Add(param2);cmd.ExecuteNonQuery();异常抛出状态:参数绑定无效定义参数名称:listofnumbers定义参数时我缺少什么属性?编辑:5月14日由于我的回答未被接受,这里有一个可能有帮助的链接:http://developergeeks.com/article/35/working-with-user-defined-type-oracle-udt-and-custom-type-using-odp-net-11g不幸的是我不能玩这个因为我有x64ODP.NET不支持UDT但是,由于您的UDT是一个集合,您是否尝试过在param1上设置Size属性?param1.Size=row_ids.Length;现在,它不是UDT,但这是我如何绑定到包规范中定义的类型的片段:TYPEt_stringlistISTABLEOFVARCHAR2(4000);string[]values=newstring[]{"AAA","BBB"};OracleParameter参数=newOracleParameter();parameter.Name="my_param";parameter.CollectionType=OracleCollectionType.PLSQLAssociativeArray;parameter.OracleDbType=OracleDbType.Varchar2;parameter.ArrayBindSize=newint[values.Length];parameter.ArrayBindStatus=newOracleParameterStatus[values.Length];parameter.Size=values.Length;for(inti=0;i我不确定您可以将ArrayBindSize设置为什么值。或者,您可以考虑为UDT创建类型工厂:http://download.oracle.com/docs/html/E15167_01/featUDTs.htmAnyway,希望你能在这里找到有用的东西以上是C#学习教程:ThebindingofOracleUDTisinvalid中的Processparameters分享的所有内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注---本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载,请注明出处:
