我有一个像这样的存储过程
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")
我怎么得到错误?并且有没有办法让我做我想做的事而不会得到错误?
答案 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