Asp调用SQL Server中存储过程的问题(200分)

  • 主题发起人 主题发起人 xxyyjjII
  • 开始时间 开始时间
X

xxyyjjII

Unregistered / Unconfirmed
GUEST, unregistred user!
现在遇到一个问题,特向各位高手请教。
在Asp中通过Recordset执行SQL Server的存储过程以打开记录集:
set Conn = Server.CreateObject ("ADODB.Connection")
Conn.Open "..."
set rs = Server.CreateObject ("ADODB.RecordSet")
rs.Open "exec Proc1",conn,3,3

以上语句都正常执行,当Proc1中只有一个SQL语句时,rs打开后RecordCount
属性显示正确,但当Proc1中有两个以上SQL语句或有判断语句,甚至Proc1的体部仅有
一句exec('select ...')时,rs的RecordCount都显示为-1,但记录集内数据扔可正常访问。
请问这是什么原因?怎样可以让RecordCount显示为正确的值?
 
摘自MSDN:
Use the RecordCount property to find out how many records are in a Recordset
object. The property returns -1 when ADO cannot determine the number of records
or if the provider or cursor type does not support RecordCount.

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;

从选择CursorType,3是Static,没错,所以我觉得RecordCount得到-1是因为它无法判断
记录数
 
谢谢fasttest2000的指教,但我尝试过所有CursorType,都显示-1,
理论上讲应该是与光标类型有关系,但实际情况好象不是这样。这个问题
还是没能解决。还有别的可能吗?
 
我上面也说了你选的类型是对的,Recordcount只支持两种CursorType,一种是static,一种
是keyset,我觉得应该是“ADO cannot determine the number of records”
 
哎呀,讨论了半天,问题还是没解决。虽然我选的类型是对的,但结果与期望不
符,还是没用。现在是因为特殊原因需要用这种方式查询数据,难道行不通?
 
我觉得应该在存储过程做处理,添加一个返回参数(output)
返回@@count
 
如果你只需要知道 记录集是否为空,可用 RecordSet的EOF来判断,
如果想知道 记录的数目,可用SELECT COUNT(*) FROM ......
 
rs.CursorLocation = adUseClient试验一下
 
在oracle中 CursorLocation 使用服务器时候:不能确定行数、不能addNew
使用Client就可以确定行数、addNew,但是打开大数据的时候那个慢
 
先在执行
rs.movelast
rs.movefirst
然后rs.RecordCount就对了
 
多人接受答案了。
 
后退
顶部