经典ASP准备语句SELECT不工作

时间:2016-11-25 14:29:13

标签: asp-classic ado adodb

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

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

当我将其转换为预备语句时,它似乎返回一个结果,但没有任何结果。

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()

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

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

1 个答案:

答案 0 :(得分:0)

@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")))