OLEDB使用CDynamicAccessor连Oracle,
根本取不到任何数据,为啥???
一样的用法在sql server下使用正常。是不是要对那个dbproperty进行什么特殊设置???

解决方案 »

  1.   

    我再发: CDataSource db;
    CSession    m_session; HRESULT hr;
    CDBPropSet dbinit(DBPROPSET_DBINIT);
    dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "netman");
    dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
    dbinit.AddProperty(DBPROP_AUTH_USERID, "dbusrpub");
    dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "jhck.com");
    dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
    dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
    dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, "");

    hr = db.OpenWithServiceComponents("OraOLEDB.Oracle.1", &dbinit);
    if (FAILED(hr))
    MessageBox("abc");
    hr = m_session.Open(db);
    if (FAILED(hr))
    MessageBox("abc");         CCommand<CDynamicAccessor, CBulkRowset> dbCommand;        try 
        {     
            _RecordsetPtr spRs,rs;
            ADORecordsetConstructionPtr spADOsCt;            CDBPropSet propset(DBPROPSET_ROWSET);            
                propset.AddProperty(DBPROP_CLIENTCURSOR, true);
                propset.AddProperty(DBPROP_IRowsetChange, true);
                propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);            CString sCommand;
                sCommand="select * from privatepara";
                
                HRESULT hr = dbCommand.Create(m_session, (LPCTSTR)sCommand);
    if(FAILED(hr))
    _com_issue_error(hr);
                
                hr = dbCommand.Open(&propset, NULL, true);
    if(FAILED(hr))
    _com_issue_error(hr);         hr = spRs.CreateInstance(__uuidof(Recordset));
    if(FAILED(hr))
    _com_issue_error(hr);
                hr = spRs->QueryInterface(__uuidof(ADORecordsetConstruction), (void **)&spADOsCt);
    if(FAILED(hr))
    _com_issue_error(hr);

            hr = spADOsCt->put_Rowset(dbCommand.m_spRowset);
    if(FAILED(hr))
    _com_issue_error(hr);            //Demonstrates, how to populate DataGrid by assigning it a Recordset object.
    //            m_ctlDataGrid.SetCaption(sTableName);
            
    m_ctlDataGrid.SetRefDataSource(NULL);
            m_ctlDataGrid.SetRefDataSource(spRs);
      m_ctlDataGrid.SetDataMode(1);
    m_ctlDataGrid.SetEditable(2);
    m_ctlDataGrid.Refresh();        }
        catch (_com_error &e)
        {
    AfxMessageBox(e.ErrorMessage());
        }   
    虽能和DATAGIRD之类的控件绑定,但不能编辑!!!请各位赐教:
      

  2.   

    to:21bird(世纪菜鸟:sailing)    你好,我现在也正遇这个难题,不知你QQ是多少,可不可以交流一下,我想既然ADO是OLEDB的包装,真接用OLEDB一样也可以,但我翻了好多书,都没有讲到那个GetRecordset(),但底是怎么回事?