package返回带cursor的过程的问题,如何调用
c#里,这样好像不对
       OracleCommand cmds = new OracleCommand("PKG_SEARCH.PRO_SEARCH_VM", OracleOP.conn);
        cmds.CommandType = CommandType.StoredProcedure;        cmds.Parameters.Add("myzm", OracleType.VarChar);
        cmds.Parameters.Add("myzl", OracleType.VarChar);        OracleParameter sOut = cmds.Parameters.Add("myOUT", OracleType.VarChar, 20);
        OracleParameter syxqz = cmds.Parameters.Add("yxqz", OracleType.DateTime);
        OracleParameter mycur = cmds.Parameters.Add("mycur_vM", OracleType.Cursor, 50);        cmds.Parameters[0].Value = DropDownList1.SelectedValue.ToString();
        cmds.Parameters[1].Value = TextBox1.Text.ToUpper(); 
        
        sOut.Direction = ParameterDirection.Output;
        syxqz.Direction = ParameterDirection.Output;
        mycur.Direction = ParameterDirection.Output;
        OracleOP.OpenConnection();
        cmds.ExecuteReader();        OracleOP.CloseConnection();        string re = sOut.Value.ToString();运行有错误。ORA-24338: 未执行语句句柄说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OracleClient.OracleException: ORA-24338: 未执行语句句柄
源错误: 
行 39: 
行 40: 
行 41:         cmds.ExecuteReader();
行 42:         //cmds.ExecuteNonQuery();
行 43:         OracleOP.CloseConnection();
 源文件: d:\My Documents\My Soft\OTC\Search_adv_veh.aspx.cs    行: 41 堆栈跟踪: 
[OracleException (0x80131938): ORA-24338: 未执行语句句柄
]
   System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc) +83
   System.Data.OracleClient.OciHandle.GetAttribute(ATTR attribute, Int32& value, OciErrorHandle errorHandle) +43
   System.Data.OracleClient.OracleDataReader.FillColumnInfo() +51
   System.Data.OracleClient.OracleDataReader..ctor(OracleConnection connection, OciStatementHandle statementHandle) +90
   System.Data.OracleClient.OracleParameterBinding.GetOutputValue(NativeBuffer parameterBuffer, OracleConnection connection, Boolean needCLSType) +520
   System.Data.OracleClient.OracleParameterBinding.PostExecute(NativeBuffer parameterBuffer, OracleConnection connection) +113
   System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) +1068
   System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals) +25
   System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior) +142
   System.Data.OracleClient.OracleCommand.ExecuteReader() +6
   Search_adv_veh.ButtonSearch_Click(Object sender, EventArgs e) in d:\My Documents\My Soft\OTC\Search_adv_veh.aspx.cs:41
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746 

解决方案 »

  1.   

    create or replace package body PKG_SEARCH is
    procedure PRO_SEARCH_VM (myzm in varchar2,myzl in varchar2,myOUT out varchar2,yxqz out date, mycur out cur_vm)
    as 
       CURSOR c_v IS select xh,yxqz from v_vm where zm_a=myzm and zl=myzl;
       myxh varchar2(20);       
    begin 
       myOUT := '-1' ;   
       OPEN c_v;  
       FETCH c_v INTO myxh,yxqz;  
       if c_v%NOTFOUND then
            myOUT := 'E1';
            CLOSE c_v;  
            return ;
       end if ; 
       CLOSE c_v; 
       
       open mycur for select n1,na,sj,dz from sf_all where xh=myxh ;
       myOUT := '1' ;  
        
      
    end PRO_SEARCH_VM;  
    end PKG_SEARCH ;
    pkg里返回1个字符串、date和一个CURSOR
    不知道C#里如何写。