我用下面的代码,我的数据库连接都没有问题,因为我取m_pRs中的值,能显示出来,但是我把它显示在DataGrid中,那两句加上,运行就有问题,它提示错误是这样的:the rowset is not bookable
_RecordsetPtr m_pRs;
_ConnectionPtr m_pConn;
try
{
CoInitialize(NULL);
m_pConn.CreateInstance(__uuidof(Connection));
m_pRs.CreateInstance(__uuidof(Recordset));
//设置服务器端游标
//m_pConn->CursorLocation = adUseServer;//adUseClient;adUseNone
//连接SQL SERVER数据库
m_pConn->Open(L"Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=9sky_nmsdb;Initial Catalog=9sky_nmsdb",L"",L"",adOpenUnspecified);
m_pRs->PutRefActiveConnection(m_pConn);
CString t = "select * from userinfo";
m_pRs->Open(_variant_t(t),_variant_t((IDispatch*)m_pConn,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);

                   m_ctrlDG.SetRefDataSource(NULL);
m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_pRs);//显示在DataGrid控件     

                 m_pRs->Close();
m_pConn->Close();

m_pRs=NULL;
m_pConn=NULL;
CoUninitialize();
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}码

解决方案 »

  1.   

    //设置服务器端游标
    //m_pConn->CursorLocation = adUseServer;//adUseClient;adUseNone把上面一句改成:m_pConn->CursorLocation = adUseClient;
      

  2.   

    可以在打开数据记录集的时候试试:
     m_pRs->CursorLocation = adUseClient;
     m_pRs->Open(....., gl_pConnection.GetInterfacePtr(), adOpenKeyset,adLockOptimistic, adCmdTable);
      

  3.   

    我加了这一句:m_pConn->CursorLocation = adUseClient;
    现在没有错误了,但是我datagrid控件,还是不能显示内容,怎么办?怎么办?