我在从SQL数据库通过ASP访问存储过程时遇到问题。 这是我的记录集代码:
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
现在它起作用了: - )
答案 0 :(得分:1)
您的命令需要一个connection
对象,需要打开它,而不仅仅是一个连接字符串。
请参阅http://support.microsoft.com/kb/300382
此外,如果您导入ADODB常量文件并使用它们(即:http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml)
,您的代码将更清晰答案 1 :(得分:1)
调用存储过程的问题是SQL-Server在最终结果集之前的已关闭记录集中返回的每个查询所触及的行数。您可以查找已经找到的下一个记录集,也可以在SP的开头添加以下指令,以消除为每个查询发送的行数。
SET NOCOUNT ON
我更喜欢这个最后的解决方案,因为它使VBScript代码更简单,但它只是一个品味问题。
答案 2 :(得分:0)
后:
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