_RecordsetPtr Requery 特别慢
使用Requery (-1)时,特别慢,400条数据居然花了将近10秒钟。
生成RecordsetPtr时的设置
if (SUCCEEDED(m_record.CreateInstance(__uuidof(Recordset))))
{
m_record->CursorLocation = adUseClient;
m_pDBList->GetRecordSet(std::get<1>(m_dbConfig),
m_record,
CursorTypeEnum::adOpenForwardOnly);
}
GetRecordSet:
bool CDBList::GetRecordSet(CString bstrSqlCmd,
_RecordsetPtr &RecordSet,
CursorTypeEnum RecordSetType)
{
long l_statu = m_pConnection->GetState();
if (l_statu != adStateOpen)
{
return false;
}
if (bstrSqlCmd.GetLength() < 10)
{
return false;
}
bool isOK = false;
int count = 0;
bool isReconn = false;
clock_t start = clock();
while (!isOK)
{
try
{
//打开记录集
if (FAILED(RecordSet->Open(_bstr_t(bstrSqlCmd),
m_pConnection.GetInterfacePtr(),
RecordSetType, adLockOptimistic, adCmdText)))
{
m_strMsg = _T("查询失败");
return false;
}
isOK = true;
m_strMsg = _T("查询成功");
}
catch (_com_error e)
{
m_strMsg.Format(_T("获取记录集出现异常,异常信息:%s,异常描述:%s"),
e.ErrorMessage(), e.Description().GetBSTR());
//CLog::Write(Error + bstrSqlCmd);
//CVecMsg::AddMsg(tagMsg(Error, eMsgType::MSG_ERROR));
clock_t end = clock();
double times = (double)(end - start) / CLOCKS_PER_SEC;
if (isReconn)
{
m_strMsg = _T("重新连接成功,依然执行失败,放弃执行");
return false;
}
if (++count >= 3 && times > 6)
{
m_strMsg = _T("重新执行操作3次,且时间超过6S,重新连接");
count = 0;
isReconn = ReConn();
start = clock();
}
Sleep(200);
isOK = false;
}
}
return true;
}