64,661
社区成员
发帖
与我相关
我的任务
分享
BOOL CAdoDB::ExecuteSQL(string strSQL, string &strError,BOOL bTrans)
{
if(strSQL.empty())
{
strError="SQL字符串不能为空!";
return FALSE;
}
if(m_pCON==NULL)
{
if(!IsOpen())
{
strError="打开连接失败! NULL";
return FALSE;
}
}else if (m_pCON->GetState()!=adStateOpen)
{
if(!IsOpen())
{
strError="打开连接失败! not adStateOpen";
return FALSE;
}
}
_variant_t rstAffected;
BSTR _bstrSQL;
try
{
_bstrSQL=_com_util::ConvertStringToBSTR(strSQL.c_str());
if(bTrans)
m_pCON->BeginTrans();
m_pCON->Execute(_bstrSQL,&rstAffected,adCmdText);
if(bTrans)
m_pCON->CommitTrans();
SysFreeString(_bstrSQL);
}
catch (_com_error &e)
{
SysFreeString(_bstrSQL);
if(bTrans)
m_pCON->RollbackTrans();
if(m_pCON->GetState()==adStateOpen)
m_pCON->Close();
strError=(LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
ReleaseCON()
{
try
{
if(m_pCMD!=NULL)
{
m_pCMD->Release();
m_pCMD=NULL;
}
}
catch(_com_error &e)
{
e.Description();
}
if(m_pCON!=NULL)
{
try
{
if(m_pCON->State!=adStateClosed)
{
m_pCON->Close();
m_pCON.Release();
}
m_pCON=NULL;
}
catch(_com_error &e)
{
e.Description();
}
}
if(m_pRCD!=NULL)
{
try
{
if(m_pRCD->State!=adStateClosed)
{
m_pRCD->Close();
m_pRCD.Release();
}
m_pCON=NULL;
}
catch(_com_error &e)
{
e.Description();
}
}
}
try
{
if(m_pCON->State!=adStateClosed)
{
m_pCON->Close();//要是这里抛出异常,下面的释放代码岂不是不能执行?
m_pCON.Release();
}
m_pCON=NULL;
}
catch(_com_error &e)
{
e.Description();
}
catch (_com_error &e)
{//要是异常不是_com_error ,这个FreeString是不是也不能执行到?
SysFreeString(_bstrSQL);