m_pCmd->Execute(NULL, NULL, lOptions);
如果这样执行可以取得返回参数。
m_pReco =  m_pCmd->Execute(NULL, NULL, lOptions);
如果这样就什么都得不到。
为什么?

解决方案 »

  1.   

    这是代码
    _ConnectionPtr pConn;
    _RecordsetPtr pReco;
    _CommandPtr pCmd;
    _ParameterPtr pParam1, pParam2, pParam3, pParam4, pParam5;
    try
    {
    pConn.CreateInstance("ADODB.Connection");
    pConn->Open("Provider=SQLOLEDB;SERVER=lenovo;DATABASE=Pubs;UID=sa;PWD=",
    "", "", -1);
    //pReco.CreateInstance("ADODB.Recordset");
    pCmd.CreateInstance(__uuidof(Command)); pCmd->ActiveConnection = pConn;
    pCmd->CommandType = adCmdStoredProc;
    pCmd->CommandText = "TestParam";

    pParam5 = pCmd->CreateParameter(_bstr_t("Return"), adInteger, adParamReturnValue, 2);
    pCmd->Parameters->Append(pParam5); pParam3 = pCmd->CreateParameter(_bstr_t("@nParam3"), adInteger, adParamOutput, 4);
    pCmd->Parameters->Append((IDispatch*)(pParam3));
    pParam4 = pCmd->CreateParameter(_bstr_t("Output2"), adVarChar, adParamOutput, 20);
    pCmd->Parameters->Append(pParam4); pParam1 = pCmd->CreateParameter(_bstr_t("Input1"), adInteger, adParamInput, 4);
    pCmd->Parameters->Append(pParam1);
    pParam2 = pCmd->CreateParameter(_bstr_t("Input2"), adVarChar, adParamInput, 20);
    pCmd->Parameters->Append(pParam2);

    pParam2->Value = _variant_t(m_strInput2);
    pParam1->Value = _variant_t((double)m_nInput1); /*pReco = */pCmd->Execute(NULL, NULL, adCmdStoredProc); m_nOutput3 = (pParam3->Value).intVal;
    m_nRetValue = (pParam5->Value).intVal;
    m_strOutput4 = (char*)_bstr_t(pParam4->Value); UpdateData(FALSE);
    }
    catch(_com_error e) // 捕捉异常
    {
    _bstr_t bstrSource(e.Source());
    _bstr_t bs =  _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
    + _bstr_t(e.ErrorMessage()) + _bstr_t(" Description: ") 
    + _bstr_t(e.Description());
    MessageBox(bs, bstrSource);
    }