2016-07-07 53 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 

這裏是調用過程

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 

我收到就行了錯誤的ASP:

IF NOT de.EOF THEN 

請,請,請幫助!我無法理解ASP爲什麼沒有看到一個名爲Status的字段的記錄集,它可以是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