ADODB.Recordset错误'800a0e78' - 传递2个参数时出错(ASP / MSSQL)

时间:2012-02-17 19:38:56

标签: stored-procedures asp-classic parameters recordset

当我将2个参数传递给我的Exec代码时,我的经典ASP页面出现错误 存储过程。基本上我想发送1个参数来覆盖我要找的列 一个用于搜索词。例如,纽约大学imSchool。我对发送的数据以及Record Set.State代码进行了数据检查,显示每次我选择带有两个参数的SQL Query时出现错误“当对象关闭时不允许操作”。总是显示。 我试图在“While not rs.EOF”代码行打开对象,它出错了一点没有运气。 我认为我的SQLQuery很糟糕,因为当我使用相同的输入在MSSQL中运行存储过程时,我每次都会得到一个返回表。 SQL Server 2008 R2和Classic ASP。

这是我的SQLQUERY CODE的声明(请记住第一个工作正常,数据从数据库中选择)

    SQLQuery = "Exec sp_vw_InternImport"

    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.CursorType = 3

    rs.Open SQLQuery, OBJdbConnection


    If filterColmn <> "" Then

    SQlQuery = "Exec sp_vw_InternImport_ColID @LookUpID=N'" + filterID + "'" + ", @LookUpCol=N'" + filterID + "'"

    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.CursorType = 3

    rs.Open SQLQuery, OBJdbConnection

    End If

这是我存储的程序代码

          SET ANSI_NULLS ON
            GO
            SET QUOTED_IDENTIFIER ON
             GO

           ALTER PROCEDURE [dbo].[sp_vw_InternImport_ColID]
            (
            @LookUpID nvarchar (255),
            @LookUpCol nvarchar (50)
            )

          AS 
       SET NOCOUNT ON
       BEGIN 

        IF @LookUpCol = 'imYear'
        SELECT * FROM v_InternImport WHERE imYear = @LookUpID

ELSE
IF @LookUpCol = 'imSchool'
SELECT * FROM v_InternImport WHERE imSchool = @LookUpID

ELSE
IF @LookUpCol = 'imDiscipline'
SELECT * FROM v_InternImport WHERE imDiscipline = @LookUpID

       IF @LookUpCol = 'imDegree'
       SELECT * FROM v_InternImport WHERE imDegree = @LookUpID
       END

2 个答案:

答案 0 :(得分:0)

你不能同时使用同一个对象两次(比如rs),你必须让它成为另一个名字,或者你必须关闭它并重新开始..这应该有效:

SQLQuery = "Exec sp_vw_InternImport"
If filterColmn <> "" Then SQLQuery = "Exec sp_vw_InternImport_ColID @LookUpID=N'" + filterID + "'" + ", @LookUpCol=N'" + filterID + "'"

  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.CursorType = 3
  rs.Open SQLQuery, OBJdbConnection
  rs.Close

或者在您的示例中,如果您在继续下一个之前关闭第一个rs对象,则可能有所帮助。

set rs = nothing ... then .... set rs = server.createobject

所以这样:

SQLQuery = "Exec sp_vw_InternImport"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorType = 3
rs.Open SQLQuery, OBJdbConnection

rs.Close ------ Close it before you re-open it

If filterColmn <> "" Then

SQlQuery = "Exec sp_vw_InternImport_ColID @LookUpID=N'" + filterID + "'" + ", @LookUpCol=N'" + filterID + "'"

rs.Open SQLQuery, OBJdbConnection
rs.Close ------ Always Close your Objects!

End If

答案 1 :(得分:0)

直接将参数传递给存储过程时,您不必“分配”参数。这样做可能会导致传递整个值(例如@LookUpCol将具有值@LookUpCol ='imYear'),因此您的SP将不会选择任何内容,并且您有空的和已关闭的记录集。

尝试使用此类代码:

SQlQuery = "Exec sp_vw_InternImport_ColID '" & filterID & "', '" & filterID & "'"