Ошибка ADODB.Recordset '800a0e78' - ошибка, когда я передаю 2 параметра (ASP / MSSQL) - PullRequest
0 голосов
/ 17 февраля 2012

Моя классическая страница ASP выдает ошибку, когда я передаю 2 параметра в код Exec для моего хранимая процедура. В основном я хочу отправить 1 пареметр, чтобы покрыть столбец, который я ищу и один для поискового запроса. Например imSchool, Нью-Йоркский университет. У меня есть данные проверки отправленных данных, а также код Record Set.State, показывающий, что каждый раз, когда я выбираю SQL-запрос с двумя параметрами, возникает ошибка «Операция не разрешена, когда объект закрыт». всегда показывает. Я попытался открыть объект в строке кода «While Not rs.EOF», где он выдал ошибку, не повезло. Я думаю, что мой SQLQuery плох, потому что когда я запускаю хранимую процедуру в MSSQL с одним и тем же вводом, я каждый раз получаю таблицу возврата. SQL Server 2008 R2 и классический ASP.

ЗДЕСЬ МОЕ, ЕСЛИ ЗАЯВЛЯЕТСЯ С КОДОМ SQLQUERY (имейте в виду, что первый работает нормально и данные выбираются из БД)

    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 голосов
/ 19 февраля 2012

При передаче аргументов в хранимую процедуру напрямую вам не нужно «присваивать» параметры.Это, вероятно, приведет к полному переданному значению (например, @LookUpCol будет иметь значение @LookUpCol ='imYear'), поэтому ваш SP не будет ничего выбирать, и у вас будет пустой и закрытый набор записей.

Попробуйте вместо этого использовать такой код:

SQlQuery = "Exec sp_vw_InternImport_ColID '" & filterID & "', '" & filterID & "'"
0 голосов
/ 19 февраля 2012

Вы не можете использовать один и тот же объект дважды в одно и то же время (например, 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
...