我是在网上模仿别人的代码的这里总是报错。好像是recordset.open 那的问题?
显示: Microsoft C++ 异常: 内存位置 0x0012f110 处的 _com_error。_variant_t vName,vAge;
CString strName,strAge;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM Database",_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);int nItemNum=this->List.GetItemCount();
m_pRecordset->MoveFirst();while(!m_pRecordset->adoEOF)
{
vName = m_pRecordset->GetCollect("name");
vAge = m_pRecordset->GetCollect("age");
strName = (LPCSTR)_bstr_t(vName);
strAge = (LPCSTR)_bstr_t(vAge);
this->List.InsertItem(nItemNum,strName);
this->List.SetItemText(nItemNum,1,strAge);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox(L"读取数据库失败!");
}

解决方案 »

  1.   

    1、你的m_pConnection确认一定连接到数据库了吗
    2、m_pRecordset.CreateInstance("ADODB.Recordset"); 
       改为m_pRecordset.CreateInstance(__uuidof(Recordset));或者
           m_pRecordset.CreateInstance("ADODB::Recordset");再试试
    3、m_pRecordset->Open("SELECT * FROM Database", 。的第一个参数是_bstr_t型的,为了安全,最好转化一下m_pRecordset->Open(_bstr_t("SELECT * FROM Database"), ...
    4、养成“有借有还的习惯”,用完了后记得关一下,m_pRecordset->Close();
    5、一般都不用ADODB命名空间的,你可以import的时候附加一个no_usnamespace