BOOL CAccessDatabase::Query(const CString strSQLString, UINT nFieldNumber, vector >&vecvecVariant)
{
_variant_t Variant;
vector<_variant_t>vecVariant;
EnterCriticalSection(&m_cs);
_RecordsetPtr pRecordset=NULL;
HRESULT hr=S_FALSE;try{
hr= pRecordset.CreateInstance(_T("ADODB.Recordset"));if(SUCCEEDED(hr))
{
hr= pRecordset->Open(strSQLString.AllocSysString(), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);if(SUCCEEDED(hr))
{if (!pRecordset->adoEOF)
{
hr= pRecordset->MoveFirst();if(SUCCEEDED(hr))
{while (!(pRecordset->adoEOF))
{
vecVariant.clear();for (UINT i = 0; i < nFieldNumber; ++i)
{
ZeroMemory(&Variant, sizeof(Variant));
Variant= pRecordset->GetCollect(_variant_t((long)i));
vecVariant.push_back(Variant);
}
vecvecVariant.push_back(vecVariant);
hr= pRecordset->MoveNext();
}
}else{
m_pLogFile->WriteLog(GetLastError(), _T("移动记录集指针到首部发生错误"));if (pRecordset->GetState() !=adStateClosed)
{
hr= pRecordset->Close();if(FAILED(hr))
{
m_pLogFile->WriteLog(GetLastError(), _T("关闭记录集失败"));
}else{
m_pLogFile->WriteLog(GetLastError(), _T("记录集已关闭"));
}
}if (pRecordset !=NULL)
{
pRecordset.Release();
pRecordset=NULL;
}
LeaveCriticalSection(&m_cs);returnFALSE;
}
}else{
m_pLogFile->WriteLog(GetLastError(), _T("查询的记录集为空"));
}
}else{
m_pLogFile->WriteLog(GetLastError(), _T("打开记录集失败"));if (pRecordset !=NULL)
{
pRecordset.Release();
pRecordset=NULL;
}
LeaveCriticalSection(&m_cs);returnFALSE;
}
}else{
m_pLogFile->WriteLog(GetLastError(), _T("初始化记录集失败"));
pRecordset=NULL;
LeaveCriticalSection(&m_cs);returnFALSE;
}
}catch(_com_error e)
{
m_pLogFile->WriteLog(e.ErrorMessage());
AfxMessageBox(e.ErrorMessage());
LeaveCriticalSection(&m_cs);returnFALSE;
}if (pRecordset->GetState() !=adStateClosed)
{try{
hr= pRecordset->Close();if(FAILED(hr))
{
m_pLogFile->WriteLog(GetLastError(), _T("关闭记录集失败"));
}else{
m_pLogFile->WriteLog(GetLastError(), _T("记录集已关闭"));
}
}catch(_com_error err)
{
m_pLogFile->WriteLog(err.ErrorMessage());
AfxMessageBox(err.ErrorMessage());
}
}if (pRecordset !=NULL)
{
pRecordset.Release();
pRecordset=NULL;
}
LeaveCriticalSection(&m_cs);returnTRUE;
}