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
Post a Comment