【问题标题】:My recordset is having a record count of -1?我的记录集的记录数为 -1?
【发布时间】:2013-05-11 04:44:27
【问题描述】:

在我的经典 asp 应用程序中,我正在调用一个存储过程,它应该通过一个 select 语句为我获取一个记录集。如果我在 sql management studio 中尝试存储过程选择语句,我会得到 100 行,但是当我尝试在类 asp 代码中调用它时,我会得到一个记录数为 -1 的记录集。

有人知道为什么会这样吗?

谢谢。

编辑:

Dim Conn
SET rsGetHireID = Server.CreateObject("ADODB.RecordSet")
SET Conn = Server.CreateObject("ADODB.Command")
Conn.CommandText = "sp_selectNewHireSQL"
Conn.CommandType = adCmdStoredProc
Conn.ActiveConnection = ConnectionString
Set rsGetHireID = Conn.Execute


NumOfHireID = rsGetHireID.RecordCount
Response.Write (NumOfHireID)

旧工作代码:

newHireSQL = "select * from NewHire where Archived = 0 order by HireID desc"
Set rsGetHireID = Server.CreateObject("ADODB.Recordset")
rsGetHireID.Open newHireSQL,ConnectionString,adOpenStatic

新编辑: 似乎解决方法是从导致循环的存储过程中删除 BEGIN 和 END。

【问题讨论】:

  • 也许不是记录数而是返回值?请显示一些代码!
  • 存储过程中有SET NOCOUNT ON吗?

标签: sql asp-classic


【解决方案1】:

我很确定您的问题是您在记录集上打开的游标类型。并非所有这些都支持 recordcount 属性。

来自 MSDN

使用 RecordCount 属性来找出有多少条记录在一个 记录集对象。 当 ADO 无法确定时,该属性返回 -1 记录数,或者如果提供程序或游标类型不 支持 RecordCount。在关闭时读取 RecordCount 属性 记录集导致错误。

要指定游标类型,您需要在记录集对象上使用 open 方法。

'use CursorType=3 (Static)
rsGetHireID .Open CommandObjectOrSQLQuery, Conn , CursorType

【讨论】:

  • 是因为我写存储过程的方式吗?所以我需要保持这样SET NOCOUNT OFF;
  • 没有。这与它无关。这正是我在回答中所说的。只需使用新语法打开记录集就可以了。
  • 我用旧的工作代码更新了我的原始帖子,你能编辑你的代码,让它与我拥有的变量一起工作吗?我想使用存储过程方法。还有我要为CommandObjectOrSQLQuery 写什么?
  • 您需要为存储的 proc 调用创建一个命令对象。 (w3schools.com/ado/ado_ref_command.asp) 并传入。
  • 我会为 cursortype 放入 adOpenStatic 吗?
【解决方案2】:

你可以使用的简单方法..

1.rsGetHireID.open newHireSQL,Conn,1,3

感谢

【讨论】:

  • 我要使用存储过程。
【解决方案3】:

删除存储过程模板默认放置的BEGIN和END。有这些会导致循环。

【讨论】:

  • 如果你要责怪存储过程,至少发布过程代码。我从未听说过BEGIN 循环...
猜你喜欢
  • 1970-01-01
  • 2016-10-02
  • 2012-10-18
  • 2010-11-26
  • 2022-01-10
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多