学习ADO.NET时,你可能会遇到ADO.NET记录集问题,这里将介绍ADO.NET记录集问题的解决方法,在这里拿出来和大家分享一下。VC使用ADO技术访问数据表,打开数据表后,获得了ADO记录集,如何获得记录数量?一个小问题,没想到还有点意思,实践完成,总结一下。
方法一、用静态、键集游标方式打开数据表
- p_hr = m_pRecordset->Open(_variant_t(bstrQuery),vNull,adOpenStatic,adLockOptimistic,adCmdText);
然后用GetRecordCount()函数,即可获得记录数量。
- m_pRecordset->GetRecordCount();
#T#另外用键集游标方式也可以获得,adOpenKeyset (键集游标),但是用adOpenDynamic (动态游标)方式,就只会返回-1。多个用户都使用同一张表,且对其进行修改的可能都很大,则***使用adOpenKeyset。如只是浏览, 使用adOpenStatic 可提高性能! 补充:adOpenStatic 静态游标 , 其它用户的修改对当前用户是不可见的. adOpenDynamic 动态游标 , 所有的修改对当前用户是见的. adOpenKeyset 是前两种的折衷 , 改对当前用户是见的. 但性能是***的.
方法二、用SQL语句实现
- “select count(*) from 表名;”,这样就不用关心游标的方式了。
例子如下:
- rs->Open("select COUNT(*) from tbUsersInfo",strCnn,
- adOpenKeyset,adLockOptimistic,adCmdText);
- long RecordCount;
- RecordCount=rs->Fields->GetItem((long)0)->GetValue();
还有一个例子:
- m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM 表名",&RecordsAffected,adCmdText);
- _variant_t vIndex = (long)0;
- _variant_t vCount = m_pRecordset->GetCollect(vIndex);
- CString message;
- message.Format("共有%d条记录",vCount.lVal);
- AfxMessageBox(message);
补充:
先将ADO记录集的
- CursorLocation = adUseClient;
然后就可以了,总之感觉很意思,一个小问题,却有几种不同的解决方法,而且对于不同的数据库,还有点不一样。