我写了个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;
}
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;
}
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;}
你先调试看看哪里出错了
会不会在别处把connection关了