hr = CmdObj.m_spCommand->Execute(NULL, IID_ISequentialStream, NULL, NULL, (IUnknown **) &pIXMLOutput );
CmdObj 为 CCommand<CNoAccessor,CNoRowset> 类型。
如果函数调用失败如何得获取错误信息?

解决方案 »

  1.   


    楼主用的是 OLE DB 吧?我没有用过这个,因为比较复杂,为什么不用 ADO ?
      

  2.   

    如何用CmdObj或CComPtr对象在执行存储过程或SQL语句时判断连接已失效?附上C++语句:
    CComPtr<ICommandProperties> pCommandProperties;
    CComPtr<ICommandText> pCommandText;

    CComPtr<ISequentialStream>   pIXMLOutput; CCommand<CNoAccessor,CNoRowset> CmdObj;

    USES_CONVERSION;

    CString Command;

    if(inXml == NULL)
    { // 没有参数
    Command.Format("exec %s", ProcName);
    }
    else if(inXml2 == NULL)
    {  // 如果有一个参数
    Command.Format("exec %s '%s'", ProcName, inXml);
    }
    else if (inXml3 ==NULL )
    { // 如果有两个参数
    Command.Format("exec %s '%s','%s'", ProcName, inXml, inXml2);
    }
    else
    Command.Format("exec %s '%s','%s','%s'", ProcName, inXml, inXml2,inXml3);
    // 创建Command对象
    HRESULT hr = CmdObj.CreateCommand(m_Sess);

    if(FAILED(hr))
    {
    return hr;
    }

    // 从Command对象中获得CommandText对象
    hr = CmdObj.m_spCommand->QueryInterface(&pCommandText);

    if(FAILED(hr))
    {
    return hr;
    }

    // 设置Command Text
    hr = pCommandText->SetCommandText(DBGUID_DEFAULT, A2OLE(Command));

    if(FAILED(hr))
    {
    TRACE("Failed to set command stream.\n");
    return hr;
    }

    // 运行命令
    hr = CmdObj.m_spCommand->Execute(NULL, IID_ISequentialStream, NULL, NULL, (IUnknown **) &pIXMLOutput );
    if(FAILED(hr))
        {
    TRACE("Failed to execute.\n");
    return hr;
    }

    // 获取结果

    CHAR szBuf[SQLBUFFERSIZE];
    CHAR szTemp[SQLBUFFERSIZE] = "";

    ULONG ulNumRead;

    CString sRet;

    memset(szBuf,0,sizeof(szBuf));

    if(pIXMLOutput != NULL)
    {
    // 读取结果到szBuf中

    while( ( hr = pIXMLOutput->Read( szBuf, sizeof(szBuf),&ulNumRead ) ) == S_OK )
    {
    // 成功,添加到szTemp中
    strcat(szTemp, szBuf);
    }

    // 进行UTF8转换
    CString strUtf8 = szTemp;

    OutXml = DecodeFromUTF8(strUtf8);
    }
    else
    {
    TRACE("ERROR: No Output Stream Detected...\n");
    return E_FAIL;
    }