郁闷的ADO,郁闷的VC,还是用JAVA比较方便,几乎不用考虑内存溢出的问题。
现在我用ADO连接数据库时,只是做连接与关闭的操作,在DEBUG时,窗口总是会出现First-chance exception in TestUseDLL.exe (KERNEL32.DLL): 0xC0000005: Access Violation.这个问题我在网上找了很久,但就是找不到解决的办法。

解决方案 »

  1.   

    我的代码为以下:
    bool initConn(char *dbsource,char *user,char *pwd){
    //bool bln = false;
    CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
    // 创建Connection对象
    if (FAILED(m_pConnection.CreateInstance(__uuidof(Connection)))) {
    WriteLogFile("connet to Oracle fail",DEBUG_ERROR);
    return false;
    }

    try{
    m_pConnection->ConnectionString = dbsource;
    m_pConnection->Open("","","",adModeUnknown);
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    }catch (_com_error &e) { if(m_pConnection){
    m_pConnection.Release();
    m_pConnection = NULL;
    }
    return false;
    }

    return true;
    }void closeConn(){ try
    {
    if (m_pRecordset)
    {
    if(m_pRecordset->State == adStateOpen)
    {
    m_pRecordset->Close();
    }
    m_pRecordset.Release();
    m_pRecordset = NULL;
    } if (m_pConnection)
    {
    if(m_pConnection->State == adStateOpen)
    {
    m_pConnection->Close();
    }
    m_pConnection.Release();
    m_pConnection = NULL;
    }

    //m_Command = NULL; CoUninitialize();
    }
    catch(_com_error &e)
    {
    WriteLogFile("关闭连接时出错", DEBUG_ERROR);
    WriteLogFile((char *)e.Description(), DEBUG_ERROR); 
    }
    catch(...)
    {
    WriteLogFile("closeConn存在其它的不可知的错误。",DEBUG_ERROR);
    }
    }
      

  2.   

    我记得Oracle有自己的c++接口吧,见过一些访问Oracle的源码,都没用用ado,毕竟Oracle都运行在Linux之类的非Win平台。
    如果可能,还是直接用它自己的接口算了,调试起来也方便。
      

  3.   

    是有个PRO*C,那个我也用过,只是不是很方便,程序会写的比较死。不过因为需求的变化比较大,不能做成一个配置式的数据库操作。
      

  4.   

    if(m_pConnection)
    LZ这样判断肯定是有问题的,