ADO方式操作数据库我们通常使用GetRecordCount函数来快速判断一个打开的记录集里面总共有多少条记录,但在使用中有时却发现有时可能查不到任何的数据,跟踪发现GetRecordCount()返回值变成了-1,而且记录集里也有记录存在。
一般情况下当ADO不能确定记录条数,或者连接提供者、游标类型都不支持RecordCount的时候,RecordCount属性都将返回-1。
最常用的两个游标类型是:
adUseClient
使用由本地游标库提供的客户端游标。本地游标引擎通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。adUseClientBatch与 adUseClient同义,也支持向后兼容性。
adUseServer
默认值。使用数据提供者或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。
这是MSDN上的解释,补充说明:使用adUseClient就是表示数据需要传输到客户端后再进行操作,不具有同步。它能更好的支持RecordCount属性,这样对性能的影响比较大,如果数据很多会更明显。adUseServer是直接在数据库中操作,处理的速度比较快。在其他的很多方面adUesServer很有限制。
如何正确使用RecordCount属性,我们只需在使用时设置好游标(静态/客户):
在m_pSet->Open()前加上:
m_pSet->CursorType = adOpenStatic;
m_pSet->CursorLocation = adUseClient;