记录集中缺少结果

时间:2013-05-16 19:10:33

标签: sql asp-classic

我在经典asp中创建记录集对象时遇到问题,我的记录集对象无法识别正确的结果数。

我的代码:

subProdQuery = "SELECT idProduct, idSupplier FROM products WHERE pcprod_ParentPrd="&prodID&";"
subRes = conn.execute(subProdQuery)
if subRes.BOF and subRes.EOF then
    response.write subProdQuery&"<br>"&subRes("idProduct")&"LAST ENTRY<br>"
else
    do until subRes.EOF
        response.write subRes("idProduct")&"<br>"
        subRes.MoveNext
    loop
end if
set subRes = nothing

我得到的结果非常奇怪。如果我手动将生成的查询键入SQL管理工作室,我会得到至少5个结果。当通过asp生成结果时,subRes始终被识别为BOF和EOF。但是,在每种情况下打印subRes(“idProduct”)的结果是我期望的每个查询的第一个结果。有什么建议?提前谢谢!

2 个答案:

答案 0 :(得分:2)

首先,防止SQL注入并使用带参数的ADODB.Command。至少,如果ProdID是int,请先验证它。

有时您需要调用MoveFirst来设置BOF / EOF标志。仅当您向前移动时,仅检查EOF就足够了。

on error resume next
Dim inttest
inttest = CLng(prodID)
if err.number > 0 then ... <<< do something about invalid inputs
on error goto 0

subProdQuery = "SELECT idProduct, idSupplier FROM products WHERE pcprod_ParentPrd=" & prodID
subRes = conn.execute(subProdQuery)

subRes.MoveFirst ' << add this
if subRes.EOF then
    response.write subProdQuery&"<br>"&subRes("idProduct")&"LAST ENTRY<br>"
else
    do until subRes.EOF
        response.write subRes("idProduct")&"<br>"
        subRes.MoveNext
    loop
end if
set subRes = nothing

而不是ADOConnection.Execute,我通常使用ADOConnection.Open来提供更多选项。

Const adUseClient = 3
Const adCmdText = 1
Const adOpenForwardOnly = 0
Const adLockReadOnly = 1
Dim subRes = Server.CreateObject("ADODB.Recordset")
subRes.Open subProdQuery, conn, adOpenForwardOnly, adLockReadOnly, adUseClient

答案 1 :(得分:1)

你必须使用set

set subRes = conn.execute(subProdQuery)

相关问题