gpt4 book ai didi

sql - 记录集中缺少结果

转载 作者:行者123 更新时间:2023-12-02 00:09:04 25 4
gpt4 key购买 nike

我在经典 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 Management Studio 中,每个查询至少会得到 5 个结果。通过 asp 生成结果时,subRes 总是被识别为 BOF 和 EOF。但是,在每种情况下打印 subRes("idProduct") 的结果是我对每个查询期望的第一个结果。有什么建议么?提前致谢!

最佳答案

首先,防止 SQL 注入(inject)并使用带参数的 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.Open 而不是 ADOConnection.Execute这允许更多的选择。

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

关于sql - 记录集中缺少结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com