存储过程:create or replace procedure psms_SysAppMain_test
          (  data_in in varchar2 ,
             data_out out varchar2 )
            as......
//已经建立连接 
   _CommandPtr         cmmd; 
   _ParameterPtr       param1,param2;  
  HRESULT hr = cmmd.CreateInstance("ADODB.Command");                                
  if(FAILED(hr))                                                                      
  {                                                                                   
   AfxMessageBox("NewNetDatabase()中创建_CommandPtr对象失败");                        
   return 0;                                                                          
  } 
  param1.CreateInstance("ADODB.Parameter");
  _variant_t  vv_in,vv_out;
  CString aa="ttttt";
  vv_in=(_variant_t) aa;//类型转换
// 存储过程参数设置
  param1 = cmmd->CreateParameter("data_in",adVarChar, adParamInput,                
  aa.getlength(),vv_in);                                               
  cmmd->Parameters->Append(param1);//设置传入参数                                                   
  
  param2 = cmmd->CreateParameter("data_out",adVarChar, adParamOutput,         
  30, vv_out);                   
  cmmd->Parameters->Append(param2);//设置返回参数
//存储过程参数设置结束  
  cmmd->CommandText=_bstr_t("psms_SysAppMain_test");//存储过程的名称  
  cmmd->ActiveConnection =pConnection.GetConnection();//指明需要使用的ADO连接
  cmmd->CommandType=adCmdStoredProc;
  try{
     cmmd->Execute(NULL, NULL, adCmdStoredProc);//调用存储过程
  }catch (_com_error e)
{
TRACE(_T(":(调用存储过程发生错误: %s\n"), e.ErrorMessage());
                AfxMessageBox(e.ErrorMessage());
return FALSE;

    
  vv_out=(_variant_t)cmmd->Parameters->GetItem(tt)->GetValue();//通过参数返回值
  cmmd.Detach(); 
我调用不带参数的存储过程可以运行成功,可是一带参数,就报“IDispatch error #3092”错误!
请问是否是我参数设置问题?

解决方案 »

  1.   

    IDispatch error #3092
    ---------------
    用e.decripation看看具体错误。
      

  2.   

    cmmd->CommandText=_bstr_t("psms_SysAppMain_test");
    改为
     cmmd->CommandText=_bstr_t("{psms_SysAppMain_test(?, ?)}");cmmd->Execute(NULL, NULL, adCmdStoredProc);
    改为
    cmmd->Execute(NULL, NULL, adCmdText);
      

  3.   

    存储过程中有return 回什么值吗?要是有的话,最后加一接收返回的参数试?
    我检查了一下以前的代码,和你的操作一样,只是多了一个返回值的参数,是正常的。