经典 ASP 准备好的语句 SELECT 不工作

Classic ASP Prepared Statement SELECT Not Working

我一直在尝试将所有查询移动到使用准备好的语句。我已经能够让 INSERT 和 UPDATE 命令正常工作,但由于某些原因 SELECT 语句不起作用。使用标准查询,我可以使用以下内容获取一行。

strSQL = "SELECT username FROM users WHERE id = " & request.querystring("id")
Set rs = objConnection.Execute(strSQL, ,adCmdText)

当我将其转换为准备好的语句时,它似乎是 return 结果,但什么也没有。

set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConnection
cmd.CommandText = "SELECT username FROM users WHERE id = ?"
cmd.CommandType = adCmdText 
cmd.Prepared = true
cmd.Parameters.Append(cmd.CreateParameter("@id", adVarChar, adParamInput, 255, request.querystring("id")))
rs = cmd.Execute()

查询 return 没有数据,但由于某种原因,以下 If 语句传递时就好像有一些数据一样。此行运行时,第一个查询将输出用户名。当准备好的语句运行时,它什么都不输出,但 if 语句传递就好像是真的。它似乎没有抛出任何错误。

if not (rs.eof and rs.bof) Then Response.Write(rs("username"))

@TimWilliams 的评论是其中一个问题,还有第二个问题。 ID 是一个整数字段,准备好的语句将其作为 varchar 发送。有数据类型似乎很疯狂,但以下结合 Tim 的评论解决了这个问题。

cmd.Parameters.Append(cmd.CreateParameter("@id", adVarChar, adParamInput, 255, request.querystring("id")))

更改为

cmd.Parameters.Append(cmd.CreateParameter("@id", 3, 1, , request.querystring("id")))