为什么在SQL Server 下用GetRecordCount()不能得到记录集个数?

juzipi2001 2003-08-21 06:08:35
我有一程序,当连接Oracle 数据库时,用Recordset的GetRecordCount()能得到正确的记录集个数,但当连接上SQL Server 时,用Recordset的GetRecordCount()得到记录集个数总是-1,请大家指点一二!谢谢。
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lee2hao 2003-08-26
  • 打赏
  • 举报
回复
GetRecordCount()获得的是访问过的纪录数,因此要获得所有纪录只有先遍历
李秀国之印 2003-08-26
  • 打赏
  • 举报
回复
同意:: piggybank(吞硬币的小猪)
喝醉的咖啡 2003-08-25
  • 打赏
  • 举报
回复
对于 GetRecordCount,如果游标类型是 dynamicset 和 snapshot,则必须遍历所有记录才能获得正确的 count,因此可以采用 MoveLast/FindLast(然后 MoveFirst 回来咯)来获得正确的结果。
喝醉的咖啡 2003-08-25
  • 打赏
  • 举报
回复
楼上 NeoBean 说的同时有 insert 和 select 是因为 insert 也返回了一个结果集合。因此返回到你的程序中有两个 RecordSet,程序不知道选择哪一个因此出现错误。
设置 Set NOCount On 将关闭 insert delete 等操作的返回信息,如:1条记录受到影响
这样只返回 select 的结果。

而连接数据库时,无论使用 ADO/DAO/RDO 等,无论采用 OLEDB 或者 ODBC/JDBC,如果数据库驱动(Provider)或游标类型不支持 RecordCount,则会返回 -1

关于游标类型,这里有一段说明
The cursor type of the Recordset object affects whether the number of records can be determined. The RecordCount property will return -1 for a forward-only cursor; the actual count for a static or keyset cursor; and either -1 or the actual count for a dynamic cursor, depending on the data source.
同样受到影响的有 PageSize/PageCount,呵呵
所以我一般用 Select Count(*) From TableName Where ... 来返回一个 count
喝醉的咖啡 2003-08-25
  • 打赏
  • 举报
回复
和游标方式有关
NeoBean 2003-08-25
  • 打赏
  • 举报
回复
必须要遍历么??以前我也遇到过类似的问题,不过当时是一条insert和select同时执行的时候无法取得记录总数,后来我在insert前加了一句SET NOCOUNT XX(忘记了当时设定的是ON还是OFF)就可以正确取得了。不知道楼上的是否与我所遇到的问题雷同。我这个经验你可以试试,我也没有把握能够正确。 :)
mprogrammer 2003-08-25
  • 打赏
  • 举报
回复
完全同意楼上的,必须遍历一次,此函数才返回正确的数值。
思危 2003-08-21
  • 打赏
  • 举报
回复
要先用MoveNext遍历一次,GetRecordCount()才可以得到正确的记录数

2,640

社区成员

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

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