vc中关于recordcount记录集数目

RecordCount属性返回指示Recordset中记录数目的Long值。用RecordCount属性可查找Recordset对象中的记录数目。如果ADO无法确定记录数目或者提供者或游标类型不支持RecordCount,则该属性返回-1。读取已关闭的RecordsetRecordCount属性将产生错误。Recordset属性取决于提供者的功能和游标类型。对于仅向前游标,RecordCount属性将返回-1;对于静态或键集游标,将返回实际计数;而对于动态游标,则返回-1或实际计数,这取决于数据源。在检验数据中介绍的范例Recordset由于仅向前游标被打开将返回–1。为了使用RecordCount属性,您需要利用更先进的游标(静态或键集)打开Recordset。在某些情况下,您的提供者或游标在首先从数据源提取所有的记录之前无法提供RecordCount值。若要强制执行这种类型的记录提取,请在调用RecordCount之前调用RecordsetMoveLast方法。以上是ADO官方手册的描述对记录集计数有以下几个方法1.直接读取recordcount2.遍历3.selectcount(*)asccfromtable1,然后再select*fromtable1第一种方法,直接读取recordcount,最简单,但是有前提,游标位置要事先指定为客户端游标,游标类型事先指定为静态游标和Keyset游标,才能够稳定的使用该属性。使用connection->execute的方法得到记录集的游标类型依赖于数据库和,connection自身的游标位置属性,有时候返回的是只读向前的游标类型,这里取得的记录集recordcount属性是-1,所以一旦要使用这种方法,请在获取记录集的时候使用recordsetopen方法,并事先明确指定游标位置,和游标类类型第二种方法,遍历,遍历的方法,可以使用movenext来遍历计数,但目前很多人封装的ADO类获取记录集的方式是从connection->execute得到,得到的记录集可能是只读向前的游标,在遍历的时候是不可以使用movefirst,movelast,move等方法,只能使用movenext方法,所以要想使用所有的move方法,就必须使用明确的游标类型的记录集来open而不是从execute中得到。所以目前见到的多数ADO封装类经常在这里出现异常。大家使用的时候必须要进行相应的修改第三种方法,是兼容性比较好,不需要考虑游标类型不确定的因素。但是代码量稍多游标中只读向前的游标是最快的,性能最好的,但如果想在movenext遍历记录集之前获取记录数就必须采用第三种方法。服务端游标和客户端游标到底谁的性能快,取决于需求和系统实际的情况,以及数据库驱动对游标的支持程度。以下来自官方手册,大家可以自行体会游标位置的重要性每个游标都使用临时资源来持有其数据。这些资源可以是内存、磁盘分页文件、临时磁盘文件,甚至是数据库中的临时存储区。当这些资源位于客户端计算机上时,游标称为客户端游标。当这些资源位于服务器上时,游标称为服务器端游标。客户端游标在ADO中,通过使用adUseClientCursorLocationEnum来调用客户端游标。利用非键集的客户端游标,服务器将整个结果集通过网络发送给客户端计算机。客户端计算机提供并管理游标和结果集所需要的临时资源。客户端应用程序可以浏览整个结果集,以确定它需要哪些行。如果静态的和键集驱动的客户端游标包括的行数太多,那么,这些游标可能给工作站带来较沉重的负载。由于所有游标库都能够生成包含数千行的游标,所以,为获取大量行集而设计的应用程序有可能性能不佳。当然,也会有例外。对于某些应用程序来说,大型客户端游标可能完美好用,并且性能可能不成问题。客户端游标的一个显然的好处是快速响应能力。结果集已下载到客户端计算机之后,浏览所有行的速度会非常快。一般来说,如果使用客户端游标,应用程序的可伸缩性更好,这是因为游标对资源的需求由每个单独的客户端而不是服务器来解决。服务器端游标在ADO中,通过使用adUseServerCursorLocationEnum来调用服务器端游标。通过服务器端游标,服务器使用由服务器计算机所提供的资源来管理结果集。服务器端游标只通过网络返回所请求的数据。该类型的游标有时可以提供比客户端游标更好的性能,尤其是存在过度拥挤的网络通信问题时。但必须指出的是,对于每个活动客户端来说,服务器端游标很容易耗费宝贵的服务器资源(至少目前是这样)。因此,必须相应地进行计划,确保服务器硬件能够管理活动客户端所请求的所有服务器端游标。另外,服务器端游标速度缓慢,因为它只提供单行访问,就是说,没有批游标可用。当插入、更新或删除记录时,服务器端游标是有用的。使用服务器端游标,在同一个连接上就可以有多个活动语句。

 

 

 

 

 

这几天做进行数据库操作时发现直接连接打开时,数据集非空时getrecordcount返回-1,最后发现原来是默认的动态游标问题,Recordset 对象的游标类型会影响是否能够确定记录的数目。对仅向前游标,RecordCount 属性将返回 -1,对静态或键集游标返回实际计数,对动态游标取决于数据源返回 -1 或实际计数。

只需要设置一下:m_conn->CursorLocation=adUseClient;随后调用就出现实际的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值