我想根据点击网页上的按钮从数据库中删除某个项目。用户可以选择从其帐户中删除项目。
我将帐号和项目号传递给存储过程。存储过程删除项目(如果存在),并返回1表示成功,如果有错误则返回0。
我的问题是提交的ASP页面不断返回错误:
ADODB.Recordset错误' 800a0e78'关闭对象时不允许操作。
如果我直接提交存储过程,我可以删除该项目,并创建一个状态为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没有看到一个记录集,其中一个名为Status的字段是1或0。
答案 0 :(得分:0)
如果您想使用已启动的版本,可以尝试使用nocount选项以确保select是发送到记录集的第一个结果。 您也可能使用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