CDatabase m_db; //数据源
CRecordset m_rs(&m_db); //记录集
CString ConnStr; //连接字符串
CString ChkStr; //查询字符串ConnStr="DSN=aaaa;Uid=;Pwd=;";
ConnStr="Select * from CK_Temp";m_db.OpenEx(ConnStr,CDatabase::openReadOnly|CDatabase::noOdbcDialog);
//    ↑  这句报错
if (!m_db.IsOpen())
{
AfxMessageBox("数据库打开错误。");
return 0;
}报错如下:
_CRTIMP void * __cdecl _malloc_dbg (
        size_t nSize,
        int nBlockUse,
        const char * szFileName,
        int nLine
        )
{
void *res = _nh_malloc_dbg(nSize, _newmode, nBlockUse, szFileName, nLine);
RTCCALLBACK(_RTC_Allocate_hook, (res, nSize, 0));
return res;
}

解决方案 »

  1.   

    对数据库处理时最好加上异常捕获
    try
    {
      m_db.OpenEx(...
    }
    catch(CDBException ...
    {
    ...
    }
    把异常返回的字符串显示出来看是什么错误
      

  2.   

    记住ado是com接口使用前一定要初始化
      

  3.   

    比如:
    CoInitialize(NULL);
    pConnectionSource.CreateInstance(__uuidof(Connection));
    rsSource.CreateInstance(__uuidof(Recordset));
    pConnectionDest.CreateInstance(__uuidof(Connection));
    rsDest.CreateInstance(__uuidof(Recordset));
      

  4.   

    ConnStr="DSN=aaaa;Uid=;Pwd=;";
    ConnStr="Select * from CK_Temp";这个变量你赋了两遍值。
      

  5.   

    这样试试:m_db.Open(ConnStr,CDatabase::openReadOnly|CDatabase::noOdbcDialog);
      

  6.   

    谢谢大家。ConnStr="Select * from CK_Temp";是笔误。
    调试了几个小时,发现真正原因是不小心把“#include <afxdb.h>”删除了!
    发现后晕了半天。