ADO 查询

woshi_hujunjun 2017-11-16 03:09:58
std::async([&]{
TRACE(_T("准备加锁\r\n"));
WaitForSingleObject(m_pDBList->m_hDBMutex, INFINITE);
TRACE(_T("加锁\r\n"));
DBConfig db;
db.InitUDL();

CDBList m_dbBase;
if (!m_dbBase.InitialConn(db))
{
ReleaseMutex(m_pDBList->m_hDBMutex);
TRACE(_T("解锁\r\n"));
return;
}

//获取数据库信息
m_record.CreateInstance(__uuidof(Recordset));
m_record->CursorLocation = adUseClient;
m_dbBase.GetRecordSet(std::get<1>(m_dbConfig), m_record, CursorTypeEnum::adOpenStatic);

/*CString l_sql(_T(""));
if (2 == m_ListID)
{
l_sql = (_T("select * from [dbo].[order_status] where order_status = 1 and status_id >3"));
}
else
{
l_sql = (_T("select * from [dbo].[order_status] where order_status = 1 and status_id <4"));
}

m_RecordShow.CreateInstance(__uuidof(Recordset));
m_RecordShow->CursorLocation = adUseClient;
m_dbBase.GetRecordSet(l_sql, m_RecordShow, CursorTypeEnum::adOpenStatic);*/

ReleaseMutex(m_pDBList->m_hDBMutex);
TRACE(_T("解锁\r\n"));

bool l_ShowList = TRUE;
while (true)
{
Sleep(1000);

WaitForSingleObject(m_pDBList->m_hDBMutex, INFINITE);
if (l_ShowList)
{
if (SUCCEEDED(m_record->Requery(-1)))
{
int count = m_record->RecordCount;
//ShowList();
}
}
ReleaseMutex(m_pDBList->m_hDBMutex);
}
});


如上代码,如果加入注释部分程序,
/*CString l_sql(_T(""));
if (2 == m_ListID)
{
l_sql = (_T("select * from [dbo].[order_status] where order_status = 1 and status_id >3"));
}
else
{
l_sql = (_T("select * from [dbo].[order_status] where order_status = 1 and status_id <4"));
}

m_RecordShow.CreateInstance(__uuidof(Recordset));
m_RecordShow->CursorLocation = adUseClient;
m_dbBase.GetRecordSet(l_sql, m_RecordShow, CursorTypeEnum::adOpenStatic);*/
查询就很慢,如果不加上这段,requery就很正常。这是什么原因呢
...全文
432 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshi_hujunjun 2017-11-16
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
一个线程使用一个数据库连接。
是在线程中新建了一个连接
赵4老师 2017-11-16
  • 打赏
  • 举报
回复
一个线程使用一个数据库连接。
woshi_hujunjun 2017-11-16
  • 打赏
  • 举报
回复
插入注释段代码后,查询会很慢,如果不插入这段代码,查询是很正常的。 但怎么看,这段代码和requery都没有任何关系。 不是说它本身查询慢
这不是鸭头 2017-11-16
  • 打赏
  • 举报
回复
把select语句耗时打印出来
woshi_hujunjun 2017-11-16
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
select的查询sql语句查询的时间是多长。先看它是不是查询很慢
正常情况下1秒就查询完了
woshi_hujunjun 2017-11-16
  • 打赏
  • 举报
回复
不会,查询语句很简单,如果在线程中只生成了一个_RecordsetPtr时很快,生成了另一个RecordsetPtr时就很慢,很奇怪
oyljerry 2017-11-16
  • 打赏
  • 举报
回复
select的查询sql语句查询的时间是多长。先看它是不是查询很慢

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧