//执行插入存储过程 
CString strOperator="0906";  
_CommandPtr cmmd;
HRESULT hr=cmmd.CreateInstance(__uuidof(Command));
 if (FAILED(hr))
    AfxMessageBox("创建_CommandPtr对象失败  ^ O ^   ");
else
   {
    _ParameterPtr param;
    param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strThingsKind1.GetLength()+1,_variant_t(m_strThingsKind1));
    cmmd->Parameters->Append(param);
    param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strName.GetLength()+1,_variant_t(m_strName));
    cmmd->Parameters->Append(param);
    param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strModel.GetLength()+1,_variant_t(m_strModel));
    cmmd->Parameters->Append(param);
    param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strCompany.GetLength()+1,_variant_t(m_strCompany));
    cmmd->Parameters->Append(param);
    param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strPhone.GetLength()+1,_variant_t(m_strPhone));
    cmmd->Parameters->Append(param);
   param = cmmd->CreateParameter("",adVarChar, adParamInput,m_strNet.GetLength()+1,_variant_t(m_strNet));
    cmmd->Parameters->Append(param);
    param = cmmd->CreateParameter("",adVarChar, adParamInput,strOperator.GetLength()+1,_variant_t(strOperator));
    cmmd->Parameters->Append(param);    param = cmmd->CreateParameter("IID",adVarChar, adParamOutput,m_strThingNew.GetLength()+1,_variant_t(m_strThingNew));
    cmmd->Parameters->Append(param);    cmmd->CommandText=_bstr_t("SQLProcAddThingsKind");
    cmmd->ActiveConnection =theApp.ADOConn;
    cmmd->CommandType=adCmdStoredProc;
    cmmd->Execute(NULL,NULL,adCmdStoredProc);//
    m_strThingNew=(char*)((_bstr_t)(cmmd->Parameters->GetItem("IID")->GetValue()));
    MessageBox(m_strThingNew);
    UpdateData(FALSE);
    cmmd.Detach();  
    MessageBox("此产品新增成功!  * ^ _ ^ *  ");
 }这段代码能成功执行,但是得到的返回值,m_strThingNew,却只是一个字符串的首字母。不知如何解决,请大侠指点一二,这个问题己经困扰了我一个下午!!!

解决方案 »

  1.   

    这个问题,刚发过,就找到问题所在了,把param = cmmd->CreateParameter("IID",adVarChar, adParamOutput,m_strThingNew.GetLength()+1,_variant_t(m_strThingNew));
    改成
    param = cmmd->CreateParameter("IID",adVarChar, adParamOutput,m_strThingNew.GetLength()+10,_variant_t(m_strThingNew));
    就行了,原来m_strThingNew.GetLength()+1太短了,具体里面的细节,还请大侠指点一二!!
      

  2.   

    一般的方法:
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=185980在使用ADO的时候,我们在程序中经常使用
    try 
    {
        //
    }
    catch(_com_error e) 
    {
         MessageBox(e.ErrorMessage());
         ........
    }来捕获ADO的异常信息
      

  3.   

    To:laiyiling(陌生人 V2.0) 
     谢谢你,请你再回答一下上面的问题好吗?明天上午我再结帖!