操作步骤如下:
1. 引入了ADO库文件
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
2. 建立了连接
void CADODemoView::OnInitialUpdate()
{
CListView::OnInitialUpdate(); CListCtrl& ctrlList = (CListCtrl&) GetListCtrl();
ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  // TODO: You may populate your ListView with items by directly accessing
//  its list control through a call to GetListCtrl().
_bstr_t source("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Society;Data Source=FANG");
_bstr_t user("");
_bstr_t pwd(""); HRESULT hr;
try{
hr = m_connection.CreateInstance(_uuidof(Connection));
if(SUCCEEDED(hr))
hr = m_connection->Open(source, user, pwd, 16);
if(SUCCEEDED(hr))
hr = m_recordset.CreateInstance(_uuidof(Recordset));
if(SUCCEEDED(hr))
m_fConnected = TRUE;
else 
m_fConnected = FALSE;
}
catch (_com_error &e){
   MessageBox(e.ErrorMessage()); 
   m_fConnected = FALSE;
}
if(!m_fConnected) MessageBox("ADO数据源初始化失败!");
else  m_strSource = (const char * )source;
}执行到这一步时没有报错,证明数据已经连接好3.打开记录集
BOOL CADODemoView::OpenCurRecordset(CString strTableName)
{
if(!m_fConnected) return FALSE;
if(strTableName.IsEmpty()) return FALSE;
//
HRESULT hr;
CString strQuery;
strQuery.Format("select * from %s", strTableName);
      //下面这条语句测试strQuery="select * from Society",而Society表是存在于已经连接上的数据库里的
MessageBox(strQuery, "Error", MB_ICONERROR | MB_OK);                                            
_bstr_t query = strQuery;
_bstr_t source =  m_strSource;
     
try{
      //错误的出现位置在这里,弹出错误提示对话框:#Dispatch error 3149 
hr = m_recordset->Open(query, source, adOpenDynamic, adLockOptimistic, adCmdText);
}
    
catch (_com_error &e){
   MessageBox(e.ErrorMessage()); 
   return FALSE;
}
return (SUCCEEDED(hr));
}在OpenCurRecordset中打开记录集时弹出错误提示对话框::#Dispatch error 3149 ,这到底是为什么,请帮助分析