代码如下,请高手指点~~
int ADOConn(char* sfz)
{
    CoInitialize(NULL);
    _ConnectionPtr conn;
    HRESULT hr;
    hr = conn.CreateInstance(__uuidof(Connection));
    if(FAILED(hr))
       return -1;   try
   {
       conn->Open("Provider=OraOLEDB.Oracle.1;Password=nct;Persist Security Info=True;User ID=phsb;Data Source=devdb","","",NULL);
   }
   catch(_com_error e)
   {
       return -1;
   }   _CommandPtr comm;
   HRESULT hr1  =  comm.CreateInstance(__uuidof(Command));    
   if(FAILED(hr1))      
   {      
       return -1;    
   }      
   comm->ActiveConnection  =  conn;  //ADO连接 
   comm->CommandText="sip_public.f_get_lsfz";  //存储过程名  
   comm->Parameters->Append(comm->CreateParameter("result",adBSTR,adParamOutput,3000,""));
   comm->Parameters->Append(comm->CreateParameter("sfz",adBSTR,adParamInput,3000,"XXXX"));
   comm->Execute(NULL,NULL,adCmdStoredProc);  //执行到这里出错
   
   //comm->Parameters->GetItem("result")->Value.bstrVal; //取返回值
   //如何把返回值赋给变量sfz
   CoUninitialize();
   return 1;
}

解决方案 »

  1.   

    comm->CommandType = adCmdStoredProc;  
    用try...catch(_com_error &e)捕捉一下异常,看看报什么错。
      

  2.   

    study the following code snippet
    http://www.fruitfruit.com/vc/database/oracle.cpp
      

  3.   

    谢谢楼上两位~呵呵~我改了后执行是成功了,但取不到返回值~在数据库中直接执行是有返回值的,但在VC中返回值是空的!如何解决?
    comm->ActiveConnection  =  conn;  //ADO连接 
       comm->CommandType = adCmdStoredProc;
       comm->CommandText="sip_public.f_get_lsfz";  //存储过程名  
       comm->Parameters->Append(comm->CreateParameter("result",adBSTR,adParamOutput,3000,""));
       comm->Parameters->Append(comm->CreateParameter("sfz",adBSTR,adParamInput,3000,"XXXX"));
       comm->Execute;  
       CString test=comm->Parameters->GetItem("result")->Value.bstrVal; //取返回值
       strcpy(sfz, test);  //返回值赋给变量sfz,返回为空??