VC在OLEDB方式下调用带临时表的存储过程的时候出问题!
创建的_RecordsetPtr对象在Open后总是关闭的!!
急!!!

解决方案 »

  1.   

    ConnectDB(); _CommandPtr cmd;
    _RecordsetPtr pRs;
    _bstr_t bstr_empty;
    _variant_t    vtEmpty  (DISP_E_PARAMNOTFOUND,VT_ERROR);
    _ParameterPtr  para[3]; 
    CArray <int,int> arpseid;
    CArray <HTREEITEM,HTREEITEM> arphtree;
    try
    {
    cmd.CreateInstance(__uuidof(Command));
    pRs.CreateInstance(__uuidof(Recordset));
    for(int h=0; h<3; h++)
    {
    para[h].CreateInstance(__uuidof(Parameters));
    }

    cmd->ActiveConnection = m_pConnDB;
    cmd->CommandType = adCmdStoredProc;
    cmd->CommandText = "Up_QrySeStrInfo";

    //参数
    para[0] = cmd->CreateParameter(bstr_empty, adSmallInt, adParamInput, 2, (_variant_t)(long)scid);
    cmd->Parameters->Append(para[0]);
    para[1] = cmd->CreateParameter(bstr_empty, adSmallInt, adParamInput, 2, (_variant_t)(long)ssid);
    cmd->Parameters->Append(para[1]);
    para[2] = cmd->CreateParameter(bstr_empty, adSmallInt, adParamInput, 2, (_variant_t)(long)1);
    cmd->Parameters->Append(para[2]);


    //执行存储过程
    cmd->Execute(NULL, NULL, adCmdStoredProc);
    //打开记录集
    pRs->CursorLocation = adUseClient;
    pRs->Open((_variant_t((IDispatch *)cmd)), vtEmpty, adOpenStatic, adLockReadOnly, -1);
      

  2.   

    我的用法和楼主稍有不同,是这样的
    [db_command(L"{ CALL Info_ListPage (?,?,?,?,?) }")]
    class CRS_InfoListPage
    {
    public:
    [ db_column("InfoID",dbtype=DBTYPE_I4,status=m_dwIDStatus,length=m_dwIDLength) ] LONG m_ID; [ db_param(1, DBPARAMIO_INPUT) ] TCHAR m_Cats[1001];
    [ db_param(2, DBPARAMIO_INPUT) ] LONG m_PageSize;
    [ db_param(3, DBPARAMIO_INPUT) ] LONG m_PageIndex;
    [ db_param(4, DBPARAMIO_INPUT) ] TCHAR m_fldName[256];
    [ db_param(5, DBPARAMIO_INPUT) ] TCHAR m_Keywords[1001]; void GetRowsetProperties(CDBPropSet* pPropSet)
    {
    // pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
    // pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
    }
    DBSTATUS m_dwIDStatus;
    DBLENGTH m_dwIDLength;
    };使用的时候,hr = CRS_InfoListPage.OpenRowset(connection);
    结果总是hr=E_FAIL
    如果去掉  [ db_column("InfoID",dbtype=DBTYPE_I4,status=m_dwIDStatus,length=m_dwIDLength) ] LONG m_ID;
    这行,则可以返回S_OK,到底要如何用OLE DB调用返回表的存储过程呢?
      

  3.   

    Unfortunitely, I got the same problem. Thanks xiaoyao19811201(俗人) though, at least I know where the wrong is. :)