存储过程导致ADODB.Field错误'800a0bcd'

时间:2014-10-16 04:37:18

标签: sql-server stored-procedures asp-classic

我有一个像这样的存储过程

UPDATE rv
SET Redeemed = 1,
    DateRedeemed = @DateRedeemed,
    OnlineID = @SaleID
FROM Coupon AS rv
WHERE REPLACE(rv.ID, '-', '') = @RewardID
    AND TypeID = 2;

EXEC [dbo].[spRewardVoucherSearch] @docketNumber = @RewardID

spRewardVoucherSearch就是这个

SELECT REPLACE(lv.ID, '-', '') AS Number, "REF" AS Ref, lv.* 
FROM Coupon AS lv 
WHERE REPLACE(lv.ID, '-', '') = @docketNumber
    AND TypeID = 2;

现在我运行以下代码

cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spRedeemGiftVoucher"
cmd.NamedParameters = True
cmd.Parameters.Append cmd.CreateParameter("@GiftVoucherID", adVarWChar, adParamInput, 9, UCase(giftVouchers(0,i)))
cmd.Parameters.Append cmd.CreateParameter("@SerialNo", adVarWChar, adParamInput, 16, UCase(giftVouchers(1,i)))
cmd.Parameters.Append cmd.CreateParameter("@DateRedeemed", adDBTimeStamp, adParamInput, 20, Now())
cmd.Parameters.Append cmd.CreateParameter("@SaleID", adBigInt, adParamInput, 0, CLng(saleid))
rs.Open cmd
giftValues(i) = rs("Value")

我收到以下错误

  

ADODB.Field错误'800a0bcd'

     

BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。

现在我正在运行此代码的页面是一个结帐处理页面,在上一页中,我已经使用spRewardVoucherSearch验证了我的凭证与几乎相似的代码存在(但它只需要第一个参数)所以我知道凭证存在。很可能它已经从数据库中删除了一个If rs.EOF Then并没有帮助,因为那时处理已经是东西了(检查只会输出错误并停止进一步处理但是我可以稍后处理)

当我在SQL Management Studio中运行第一个程序时,我得到的结果集是我运行spRewardVoucherSearch(这是我想要的)。因为我在前一页上自己运行spRewardVoucherSearch而得到rs("Value")我怎么得到错误?并且有没有办法让我做我想做的事而不会得到错误?

2 个答案:

答案 0 :(得分:1)

您需要检查记录集是否为空。

您可以这样编码:

If Not (rs.EOF And rs.BOF) Then 
 giftValues(i) = rs("Value")
Else 
 MsgBox "Recordset is Empty"
End If

答案 1 :(得分:0)

尝试这种方法:

'do not use rs.Open cmd  
'Execute the stored procedure instead
SET rs = cmd.Execute
SET cmd = Nothing

'You can now access the record set
if (not rs.EOF) THEN
    'giftValues(i) = rs("Value")
    Response.Write rs("Value")'print it
end if

'dispose your objects
rs.Close
SET rs = Nothing

conn.Close
SET conn = Nothing