2016-07-07 3 views
0

Я хочу удалить элемент из базы данных на основе кнопки, нажатой на веб-странице. Пользователь может удалить объекты из своей учетной записи.Статус возврата обычной хранимой процедуры ASP

Я передаю номер счета и номер позиции до хранимой процедуры. Хранимая процедура удаляет элемент, если он существует, и возвращает либо 1 для успеха, либо 0, если произошла ошибка.

Моя проблема заключается в том, что страница ASP когда постоянно представлены возвращает ошибку:

ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.

Если я подать непосредственно хранимую процедуру, я могу удалить элемент и создается запись, где состояние 1. Если это не удаляются, запись имеет статус 0.

Таким образом, должны всегда быть созданы записи, которая имеет статус либо 1 или 0.

Вот хранимая процедура:

CREATE PROCEDURE dbo.SAVED_ITEM_DELETE 
    @AccountID int, 
    @Item int 
AS 
BEGIN 
    DECLARE @Status INT 

    SET @Status = 1  

    IF EXISTS(SELECT AccountID FROM Accounts_Items 
      WHERE AccountID = @AccountID AND Item = @Item) 
    BEGIN TRY     
     DELETE Account_Items 
     WHERE AccountID = @AccountID AND Item = @Item    
    END TRY 
    BEGIN CATCH 
     SET @status = 0 
    END CATCH  

    SELECT @Status AS Status 
END 

А вот ASP, который вызывает процедуру

dim de 
Set de = Server.CreateObject("ADODB.recordset") 
de.open "SAVED_ITEM_DELETE 1,49", connect,2 

IF not de.EOF THEN 
    IF de("Status") = 1 THEN 
     response.write request("delete") & " - deleted" 
    ELSE 
     response.write request("delete") & " - not deleted" 
    END IF 
END IF 

Я получаю ошибку на линии:

IF NOT de.EOF THEN 

Пожалуйста, пожалуйста, пожалуйста, помогите! Я просто не могу понять, почему ASP не видит набор записей с полем «Статус», которое равно 1 или 0.

+0

Зачем вам нужен набор записей? вместо этого используйте выходной параметр ... –

+0

Я не слышал об этом раньше. Вы можете объяснить? Спасибо за ответ. – TVRV8S

+0

sql очень прост - вы просто изменяете '@ status' от переменной до параметра и добавляете ключевое слово' output', я действительно не могу вспомнить, однако, как вернуть его в 'adoddbo.Command'. Прошло более десяти лет с тех пор, как я в последний раз использовал asp3. –

ответ

0

Если вы хотите перейти к версии, которую вы начали, вы можете попробовать использовать параметр nocount для обеспечения выбора это первый результат, отправленный на ваш набор записей. Также существует опечатка, так как вы используете Accounts_Items и Account_Items в качестве имени таблицы.

CREATE PROCEDURE dbo.SAVED_ITEM_DELETE 
    @AccountID int, 
    @Item int 
AS 
BEGIN 
    SET NOCOUNT ON 
    DECLARE @Status INT 

    SET @Status = 1  

    IF EXISTS(SELECT AccountID FROM Accounts_Items 
      WHERE AccountID = @AccountID AND Item = @Item) 
    BEGIN TRY     
     DELETE Accounts_Items 
     WHERE AccountID = @AccountID AND Item = @Item    
    END TRY 
    BEGIN CATCH 
     SET @status = 0 
    END CATCH  

    SET NOCOUNT OFF 
    SELECT @Status AS Status 
END 

 Смежные вопросы

  • Нет связанных вопросов^_^