0

我在通过 ASP 从 SQL 数据库访问存储过程时遇到问题。这是我的记录集代码:

Dim com_AntwoordenPerVraag__mem_id
com_AntwoordenPerVraag__mem_id = "0"
If Session("MM_MemberID") <> "" Then
    com_AntwoordenPerVraag__mem_id = Session("MM_MemberID")
End If

Dim com_AntwoordenPerVraag__cat_id
com_AntwoordenPerVraag__cat_id = "0"
If Request.QueryString("cat_id") <> "" Then
    com_AntwoordenPerVraag__cat_id = Request.QueryString("cat_id")
End If

set com_AntwoordenPerVraag = Server.CreateObject("ADODB.Command")
com_AntwoordenPerVraag.ActiveConnection = MM_modular_STRING
com_AntwoordenPerVraag.CommandText = "dbo.spAantal_antwoorden_per_vraag_per_member"
com_AntwoordenPerVraag.Parameters.Append com_AntwoordenPerVraag.CreateParameter("@RETURN_VALUE", 3, 4)
com_AntwoordenPerVraag.Parameters.Append com_AntwoordenPerVraag.CreateParameter("@mem_id", 3, 1,2,com_AntwoordenPerVraag__mem_id)
com_AntwoordenPerVraag.Parameters.Append com_AntwoordenPerVraag.CreateParameter("@cat_id", 3, 1,2,com_AntwoordenPerVraag__cat_id)
com_AntwoordenPerVraag.CommandType = 4
com_AntwoordenPerVraag.CommandTimeout = 0
com_AntwoordenPerVraag.Prepared = true
set rs_AntwoordenPerVraag = com_AntwoordenPerVraag.Execute

rs_AntwoordenPerVraag_numRows = 0

我收到以下错误消息:

ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

我在这里收到消息:

If rs_AntwoordenPerVraag.EOF And rs_AntwoordenPerVraag.BOF Then

编辑

我找到了解决方案。

后:

set rs_AntwoordenPerVraag = com_AntwoordenPerVraag.Execute

我放:

If rs_AntwoordenPerVraag.State <> 1 Then
While rs_AntwoordenPerVraag.State <> 1
Set rs_AntwoordenPerVraag = rs_AntwoordenPerVraag.NextRecordset
Wend
End If

现在它可以工作了:-)

4

3 回答 3

1

您调用存储过程的问题是 SQL-Server 在最终结果集之前的封闭记录集中返回的每个查询所触及的行数。您可以查找已找到的下一个记录集,也可以在 SP 的开头添加以下指令,以消除发送每个查询的行数。

SET NOCOUNT ON

我更喜欢最后一种解决方案,因为它使 VBScript 代码更简单,但这只是个人喜好问题。

于 2014-09-27T17:25:41.793 回答
1

您的命令需要一个connection对象,并且需要打开它,而不仅仅是一个连接字符串。

请参阅http://support.microsoft.com/kb/300382

此外,如果您导入 ADODB 常量文件并使用它们(即:http ://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml ) ,您的代码会更清晰

于 2013-08-08T13:16:23.207 回答
0

OP 本身已经找到了解决方案并且可以正常工作!真的很感谢他。

后:

set rs_AntwoordenPerVraag = com_AntwoordenPerVraag.Execute

放:

If rs_AntwoordenPerVraag.State <> 1 Then
While rs_AntwoordenPerVraag.State <> 1
Set rs_AntwoordenPerVraag = rs_AntwoordenPerVraag.NextRecordset
Wend
End If
于 2014-09-27T05:10:28.563 回答