当前位置:asp编程网>技术教程>Asp教程>  正文

RecordCount=-1解决方案

1970-01-01 08:00:00   来源:网络    作者:佚名   浏览量:2004   收藏

信息来源:Microsoft“Q194973 PRB: ADO: Recordcount May Return -1”文件

现象

当在服务器端请求RecordCoun时会返回-1。这是因为ActiveX Data Objects (ADO) 2.0中的CursorType是adOpenForwardonly或者adOpenDynamic。

如果是ADO 1.5,只发生在cursortype是adOpenForwardonly的时候。如果使用OLEDB provider for JET和SQL Server产生的结果可能不同,这依赖于数据库的提供者。

提供者可能不支持某些CursorTypes。当你选择的CursorType不被支持时,提供者将选择最接近于你所请求的CursorType。请参考你的提供者的文档。此外,请注意不是所有的LockType和CursorType的组合都可以同时工作。改变LockType将强制改变CursorType。请确定使用调试来检查CursorType的值。

原因

在动态的游标中纪录号可能改变。Forwardonly的游标无法返回RecordCount。

解决办法

使用adOpenKeyset(=1)或者adOpenStatic(=3)作为服务器端游标或者客户端游标。客户端只使用adOpenStatic作为CursorTypes,而不管你选择什么样的CursorType。

状态

这个形式是设计决定的。

==============================
链接文档帮助理解解决

有关rs.open sql,1,1中“1”和另外一个“1”的解释

rs.open sql,1,1也可以写成

rs.CursorType = 1
rs.LockType = 1
rs.open sql
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

其中CursorType代表从一个表或者一个SQL查询结果返回的记录。

这个参数有四个值分别是:

adOpenForwardOnly(=0)
表示只允许在记录集内的记录间往前移动。这个是缺省值。(只读,且当前数据记录只能向下移动)

adOpenKeyset(=1)
反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。(只读,当前数据记录可自由移动)

adOpenDynamic(=2)
反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录。(可读写,当前数据记录可自由移动)

adOpenStatic(=3)
不反映其它用户对记录所做的修改,添加,删除动作。(可读写,当前数据记录可自由移动,可看到新增记录)

lockType 表示当打开记录集时,数据提供者用于锁定数据库的类型:

adLockReadOnly(=1)
数据不能改变,缺省锁定类型,记录集是只读的,不能修改记录

adLockPessimistic(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。(数据提供者在开始编辑数据的时候锁定记录)

adLockOptimistic(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。(仅当调用update方法时,数据提供者锁定记录)

adLockBatchOptimistic(=4)
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。(用于批处理修改)




关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网