我写了个Ado执行程序,可是每次运行都会报无效或已关闭的连接(m_pConnection),请各位大哥帮帮小弟啊,急哦,代码如下
BOOL CADODB::ExecSQL(LPCTSTR lpszSql)
{
_CommandPtr pCmd   = NULL;
_variant_t sql="Select * from Users order by UID desc";

try
{
if (m_pRecord != NULL)

m_pRecord.Release();
m_pRecord = NULL;
}
HRESULT hr = m_pRecord.CreateInstance(__uuidof(Recordset));
    m_pRecord->putref_ActiveConnection(m_pConnection);
    m_pRecord->put_CacheSize(5000); 
    m_pRecord->PutLockType(adLockReadOnly);
        m_pRecord->PutCursorType(adOpenStatic); pCmd.CreateInstance(__uuidof(Command));        //创建一个Comand实例
    pCmd->putref_ActiveConnection(m_pConnection);  //非常关键的一句,将建立的连接赋值给它
pCmd->put_CommandType(adCmdText);
pCmd->put_CommandText(sql.bstrVal);       //命令字串(执行线程传递过来的命令语句) m_pRecord=pCmd->Execute( 0,0,adCmdText); pCmd.Release();
}
catch(_com_error &ce)
{
char ErrMsg[255];
sprintf(ErrMsg,"%s",ce.ErrorMessage()); if(m_pRecord!=NULL)
{
m_pRecord.Release();
m_pRecord = NULL;
}
if(m_pConnection!=NULL)
{
m_pConnection.Release();
m_pConnection=NULL;
} ConnectDB(m_DBInfo);
return FALSE;
} return TRUE;
}

解决方案 »

  1.   

    我的m_pConnection是在下面这段代码定义的,帮帮忙啊
    BOOL CADODB::ConnectDB(DBInfo dbinfo)
    {
    m_bConnected=true;
    _bstr_t strConn;
    _ConnectionPtr pCon=NULL; if(m_pConnection!=NULL)
    {
    m_pConnection.Release();
    m_pConnection=NULL; 
    } try
    {
    HRESULT hr;
            hr=m_pConnection.CreateInstance(__uuidof(Connection));
            if(FAILED(hr))
    {
                TRACE("初始化连接对象失败");
                return false;
    } m_pConnection->put_CommandTimeout( 15 );
    strConn  = _bstr_t ( "Provider=MSDAORA.1;Data Sourse=" );
    strConn += _bstr_t ( CString(dbinfo.szDbName) );
    strConn += _bstr_t ( ";User ID=" );
    strConn += _bstr_t ( CString( dbinfo.szDbUser ) );
            strConn += _bstr_t ( ";Password=" );
            strConn += _bstr_t ( CString( dbinfo.szDbPassword ) );
    m_pConnection->Open( strConn, _bstr_t(dbinfo.szDbUser),_bstr_t(dbinfo.szDbPassword),16);
    }
            catch(_com_error &ce)    //数据库打开异常
    {
    char ErrMsg[255];
    sprintf(ErrMsg,"%s",ce.ErrorMessage());         if(m_pConnection != NULL)
    {
      m_pConnection.Release();
      m_pConnection = NULL;
    } m_bConnected=false;
    return m_bConnected;
    }
    return m_bConnected;}
      

  2.   


    你先调试看看哪里出错了
    会不会在别处把connection关了