C# issue with an Oracle package -


i have issue simple procedure in oracle package. there other procedures using in package work fine. other packages cursors. 1 uses return. not able code past cmd.executenonquery(). thinking did not construct command properly. have try modify command, still not seem work. if take @ appreciate it.

stored procedure in oracle package:

name             data types: arc_number       varchar2(12) transaction_id   number trans_status     varchar2(1) paid_amt         number(8,2)  procedure update_trans_by_output( var_arcnum in transaction.arc_number%type, var_trans in transaction.transaction_id%type, var_transstatus in transaction.trans_status%type, var_paidamt in transaction.paid_amt%type, var_return out varchar2)    begin  begin update transaction set   arc_number = var_arcnum,   trans_status = var_transstatus,   paid_amt = var_paidamt transaction_id = var_trans;   var_return := 'pass'; exception when others   var_return := 'fail'; end update_trans_by_deduct; 

c# code

    public void updatetransactiondeduct(string txtarc, string txttransid, string vstatus, string txtpaidamt)     {         string constr = webconfigurationmanager.connectionstrings["oracledbconnection"].connectionstring;          oracleconnection con = new oracleconnection(constr);          oraclecommand cmd = new oraclecommand();         cmd.connection = con;          cmd.commandtype = commandtype.storedprocedure;         cmd.commandtext = "ucs.trans_data.update_trans_by_output";          cmd.bindbyname = true;          //assign parameters passed         cmd.parameters.add("var_arcnum", oracledbtype.varchar2).value = txtarc;         cmd.parameters["var_arcnum"].direction = parameterdirection.input;         cmd.parameters.add("var_trans", oracledbtype.int16).value = txttranidnum;         cmd.parameters["var_trans"].direction = parameterdirection.input;         cmd.parameters.add("var_transstatus", oracledbtype.varchar2).value = vstatus;         cmd.parameters["var_transstatus"].direction = parameterdirection.input;         cmd.parameters.add("var_paidamt", oracledbtype.decimal).value = txtpaidamtnum;         cmd.parameters["var_paidamt"].direction = parameterdirection.input;          cmd.parameters.add("var_return", oracledbtype.varchar2);         cmd.parameters["var_return"].direction = parameterdirection.returnvalue;          con.open();         cmd.executenonquery(); //<=== errors out here          string txtreturn = cmd.parameters["var_return"].value.tostring();          con.close();          if (txtreturn == "fail" | txtreturn == null)         {             msgbox("transaction record not updated.");         }         else         {             msgbox("transaction updated.");         }     } 

when copy exception detail clipboard get

exception details clipboard

oracle.manageddataaccess.client.oracleexception unhandled user code   datasource=""   errorcode=-2147467259   hresult=-2147467259   isrecoverable=false   message=ora-06550: line 1, column 15: pls-00306: wrong number or types of arguments in call 'update_trans_by_deduct' ora-06550: line 1, column 7: pl/sql: statement ignored   number=6550   procedure=""   source=oracle data provider .net, managed driver   stacktrace:    @ oracleinternal.serviceobjects.oraclecommandimpl.verifyexecution(oracleconnectionimpl connectionimpl, int32& cursorid, boolean bthrowarraybindrelatederrors, oracleexception& exceptionforarraybinddml, boolean& hasmorerowsindb, boolean bfirstiterationdone)    @ oracleinternal.serviceobjects.oraclecommandimpl.verifyexecution(oracleconnectionimpl connectionimpl, int32& cursorid, boolean bthrowarraybindrelatederrors, oracleexception& exceptionforarraybinddml, boolean bfirstiterationdone)    @ oracleinternal.serviceobjects.oraclecommandimpl.executenonquery(string commandtext, oracleparametercollection paramcoll, commandtype commandtype, oracleconnectionimpl connectionimpl, int32 longfetchsize, int64 clientinitiallobfs, oracledependencyimpl orcldependencyimpl, int64[]& scnfromexecution, oracleparametercollection& bindbypositionparamcoll, boolean& bbindparampresent, oracleexception& exceptionforarraybinddml, boolean isfromef)    @ oracle.manageddataaccess.client.oraclecommand.executenonquery()    @ query_test.review_list.updatetransactiondeduct(string txtpolicy, string txttransid, string vstatus, string txtpaidamt) in c:\working\test\query_test\query_test\review_list.aspx.cs:line 314    @ query_test.review_list.gridviewlistcomp_rowupdated(object sender, gridviewupdateeventargs e) in c:\working\test\query_test\query_test\review_list.aspx.cs:line 115    @ system.web.ui.webcontrols.gridview.onrowupdating(gridviewupdateeventargs e)    @ system.web.ui.webcontrols.gridview.handleupdate(gridviewrow row, int32 rowindex, boolean causesvalidation)    @ system.web.ui.webcontrols.gridview.handleevent(eventargs e, boolean causesvalidation, string validationgroup)    @ system.web.ui.webcontrols.gridview.raisepostbackevent(string eventargument)    @ system.web.ui.webcontrols.gridview.system.web.ui.ipostbackeventhandler.raisepostbackevent(string eventargument)    @ system.web.ui.page.raisepostbackevent(ipostbackeventhandler sourcecontrol, string eventargument)    @ system.web.ui.page.raisepostbackevent(namevaluecollection postdata)    @ system.web.ui.page.processrequestmain(boolean includestagesbeforeasyncpoint, boolean includestagesafterasyncpoint)   innerexception:  

technically, var_return not return value function, output parameter.

for reason, try changing:

cmd.parameters["var_return"].direction = parameterdirection.returnvalue; 

to:

cmd.parameters["var_return"].direction = parameterdirection.output; 

there may other problems, start that.


Comments