难道用CDatabase和CRecordset访问数据库这么慢吗
编号:QA003786
建立日期: 2001年1月18日 最后修改日期:2001年2月5日
所属类别:
张大力:
操作系统:windows98
编程工具:VC++6.0 Access ODBC
问题:我使用CDatabase类打开数据库,用CRecordset类来读取数据,并显示到列表框(m_List)中。使用如下代码:
CDatabase myMdb;
// 数据库已打开......
CRecordset tmpRS(&myMdb);
tmpRS.Open(CRecordset::forwardOnly,"SELECT * FROM jnml");
CString szResult;
while( !tmpRS.IsEOF() )
{
tmpRS.GetFieldValue( "bt",szResult);
m_List.AddString( szResult );
tmpRS.MoveNext();
}
以上代码能正确运行,但要花很长时间(30秒左右),而且硬盘在这30秒内一直在操作。
1、这个数据库没有问题,因为我用把这个数据库用Web服务中,用ASP网页来读取,速度很快,硬盘几乎不动;
2、我把循环语句去掉,只让它显示一条记录,则只需花2、3秒;
3、我把循环的语句逐个去掉试了一下,结果发现每一条语句的重复运行都要花较长时间。
难道用CDatabase和CRecordset访问数据库这么慢吗?我想一定是什么地方出了问题,能帮我吗?
水平: 刚入门
回答:
point的意见:
你可以先获取tmpRS的记录数,再利用for实现循环,这样速度应该会有提高,一般来说能用for的时候就尽量不要用while实现循环。
秋的意见:
数据库是Access吗?如果是Access,那么最好不要用ODBC,那样速度会很慢,因为Access使用的是Jet引擎.对于Access数据库,应该使用DAO,使用类CDaoDatabase,CDaoRecordset.
即使不是Access,ODBC本身的速度也不是很快,而且访问的速度也跟数据表的数据量和主键、索引有关。如果Web服务中使用的不是ODBC,那么参照的结果是没有意义的。可以通过使用其他走ODBC的应用程序,比较速度。例如offic97下的MSQuery。仅供参考。
张大力的意见:
我自己终于找到答案了。原因在于我的“控制面板”、“ODBC数据源”中启动了“跟踪”,取消后,速度就很快了,在2.5秒内就完成了500多条记录的查询、显示等操作。
此问题由point等回答。
| |
|
|
| |
|
|