有关GetRecordCount()

来源:百度知道 编辑:UC知道 时间:2024/06/03 23:01:34
使用此函数获得数据库中记录个数是,有时候是对的,有时候又不对?为什么会这样呢?
另如果想得到当前记录数+1,显然用GetRecordCount()+1不行,那么有没有办法解决呢?

GetRecordCount的使用问题在技术社区里也讨论很多次,一般的建议都是尽量不使用这个函数,要使用也是先通过循环MoveFirst、MoveNext遍历后在使用。但是这样感觉很麻烦也不是很安全,因为如果没有记录很难保证MoveFirst不抛出异常,当然也可以使用try{...}、catch(_com_error &e){...}方式来捕捉异常。所以另一钟更常见的方式就是使用select count(*) as tatol from table查询语句,然后用GetCollect方法(ADO)取得total的值来得到。
在很多时候,我们又很需要GetRecordCount函数来快速判断一个打开的记录集里面总共有多少条记录。我一般是使用ADO方式操作数据库,所以这里谈的很多情况只适合ADO方式。
先看个问题:
_ConnectionPtr m_pCon;
_RecordsetPtr m_pSet;
m_pSet.CreateInstance("ADO.Record");
m_pCon.CreateInstance("ADO.Connect");
m_pCon->Open("DSN=***;.....);//连接到一个设置好的DSN名称,后面的参数就不写啦
m_pSet->Open();//这里打开一个表
关键位置:
if(m_pSet->GetRecordCount() != 0)//如果记录条数不为0
{
//控制操作记录
}
以上代码能够完全正常的运行,后来把连接的语句换为了:
m_pCon->Open("provider=sqloledb;.....); //换了一种数据库连接提供者
却发现查不到任何的数据,跟踪发现GetRecordCount()返回值变成了-1,而且记录集里也有记录存在。后来通过查MSDN解决了问题。
一般情况下当ADO不能确定记录条数,或者连接提供者、游标类型都不支持RecordCount的时候,RecordCount属性都将返回-1。而在一个已经关闭了的Rec