bluelamb(bluelamb) 大虾,应该怎么调用呢?

解决方案 »

  1.   

    可能是参数类型不对,请参考下面的语句,内容差不多,你自己尝试着改改看能否解决int CUniDB::getUserInfo(string strUserName,CUser& user)
    {
      HRESULT hr = S_OK;
      _RecordsetPtr pRstUserInfo = NULL;
      _CommandPtr   pcmdUserInfo = NULL;
      _ParameterPtr pprmUserInfo = NULL;
      _ConnectionPtr pDBConnection = NULL;
      long paramSize = 16;
      _bstr_t bstrUserID = "";
      _bstr_t bstrPassword = "";  //参数
     bstrUserID = strUserName.c_str();
             try
             {
               TESTHR(pDBConnection.CreateInstance(__uuidof(Connection)));
               hr = pDBConnection->Open((_bstr_t)connectPoolStr,"","",adConnectUnspecified);
               
               //Open Command Object with one Parameter
               TESTHR(pcmdUserInfo.CreateInstance(__uuidof(Command)));
               pcmdUserInfo->CommandText = "ADE.PROC_ALLOC_ID"; 
               pcmdUserInfo->CommandTimeout = 15;
               pcmdUserInfo->CommandType = adCmdStoredProc;
               pcmdUserInfo->PutPrepared(true);
               
               pprmUserInfo = pcmdUserInfo->CreateParameter("username",adBSTR,adParamInput,paramSize,bstrUserID);
               pprmUserInfo->Value  = bstrUserID;
               pcmdUserInfo->Parameters->Append(pprmUserInfo);
               //Create Recordset by executing the command
               TESTHR(pRstUserInfo.CreateInstance(__uuidof(Recordset)));
               pRstUserInfo->CursorLocation = adUseClient;
               pcmdUserInfo->ActiveConnection = pDBConnection;
               pRstUserInfo = pcmdUserInfo->Execute(NULL,NULL,adCmdStoredProc);
      

  2.   

    下面是我使用ADO调用存储过程的方法,看看有没有参考价值:_CommandPtr SPQueryCommand;
    SPQueryCommand.CreateInstance(_uuidof(Command));
    SPQueryCommand->ActiveConnection = ((CQueryInfoApp *)AfxGetApp())->m_pConnection;
    SPQueryCommand->CommandText = "tools_pk_spinfo_sch.tools_sp_spInfo";

    _ParameterPtr IcpCodeParam,IcpNameParam,IcpShortNameParam,IcpServerIDParam,ServNameParam,SerAlaisParam,TableNameParam,RetParam;IcpCodeParam.CreateInstance("ADODB.Parameter");
    IcpNameParam.CreateInstance("ADODB.Parameter");
    IcpShortNameParam.CreateInstance("ADODB.Parameter");
    IcpServerIDParam.CreateInstance("ADODB.Parameter");
    ServNameParam.CreateInstance("ADODB.Parameter");
    SerAlaisParam.CreateInstance("ADODB.Parameter");
    TableNameParam.CreateInstance("ADODB.Parameter");
    RetParam.CreateInstance("ADODB.Parameter");IcpCodeParam = SPQueryCommand->CreateParameter("v_icpcode",adVarChar,adParamInput,30,(_variant_t)strIcpCode);
    SPQueryCommand->Parameters->Append(IcpCodeParam);IcpNameParam = SPQueryCommand->CreateParameter("v_icpname",adVarChar,adParamInput,30,(_variant_t)strSPName);
    SPQueryCommand->Parameters->Append(IcpNameParam);IcpShortNameParam = SPQueryCommand->CreateParameter("v_icpshortname",adVarChar,adParamInput,30,(_variant_t)strShortName);
    SPQueryCommand->Parameters->Append(IcpShortNameParam);IcpServerIDParam = SPQueryCommand->CreateParameter("v_icpservid",adVarChar,adParamInput,30,(_variant_t)strServerCode);
    SPQueryCommand->Parameters->Append(IcpServerIDParam);ServNameParam = SPQueryCommand->CreateParameter("v_servname",adVarChar,adParamInput,30,(_variant_t)strServerName);
    SPQueryCommand->Parameters->Append(ServNameParam);SerAlaisParam = SPQueryCommand->CreateParameter("v_servidalais",adVarChar,adParamInput,30,(_variant_t)strSerIDAlasNo);
    SPQueryCommand->Parameters->Append(SerAlaisParam);TableNameParam = SPQueryCommand->CreateParameter("new_tab_name",adVarChar,adParamOutput,30,(_variant_t)m_strTempTableName);
    SPQueryCommand->Parameters->Append(TableNameParam);RetParam = SPQueryCommand->CreateParameter("sql_err",adVarChar,adParamOutput,50);
    SPQueryCommand->Parameters->Append(RetParam);

    SPQueryCommand->Execute(NULL,NULL,adCmdStoredProc);
      

  3.   

    _CommandPtr     pCmdChange  = NULL;
    _ParameterPtr pprmByRoyalty = NULL;pCmdChange.CreateInstance(__uuidof(Command));
    pCmdChange->CommandType = adCmdStoredProc;
    pCmdChange->CommandText = "pkg_test.get";


    //Define Integer/variant.
    pprmByRoyalty.CreateInstance(__uuidof(Parameter));
    VARIANT vtRoyalty;
    vtRoyalty.vt = VT_I2;
    vtRoyalty.iVal = 20;
    pprmByRoyalty = pCmdChange->CreateParameter("param1",adInteger,adParamInput,sizeof(int),vtRoyalty);
    pCmdChange->Parameters->Append(pprmByRoyalty);pprmByRoyalty->Value  = vtRoyalty;
    看看上面这段代码,对你是不是有帮助。
      

  4.   

    因为不能在服务器上调试,只能编译好了多打些打印信息找错误,执行到cmd->ActiveConnection = m_pConnection;跳出
    catch说是无效指针。但是,我编写的这个函数在我自己的机器上怎么运行都正常啊!!!感谢各位的帮助,如果各位给我提供的办法尝试成功,800分绝对少不了,再次谢谢各位!
      

  5.   

    是不是要改成cmd->ActiveConnection = ((CQueryInfoApp *)AfxGetApp())->m_pConnection;
      

  6.   

    m_pConnnecton作成全局变量。
    command->ActiveConnection = gConnection;
    这句话要在command->Append的前面。
    如果实用就给800澳。咔咔。
      

  7.   

    int GetNewID(char *Inputstr)pParamRk->Value=_variant_t(Inputstr);//int->CString->_variant_t后赋值cmd->Parameters->Append(pParamRk);
    不知道你怎么调用的。也许你应该把char *Inputstr拷贝出来后在
    pParamRk->Value=xxx;//赋值吧