【发布时间】:2011-06-16 03:46:56
【问题描述】:
我想简单地从经典 ASP 页面中的数据库中检索一条记录。下面的代码基本上可以工作,但是我需要帮助解决几个问题:
1) 我想看看有没有返回记录。 result 不是 Nothing,因此永远不会执行底部的重定向。 contact.RecordCount 总是返回-1,所以我显然也不能使用它。奇怪的是,尝试在函数外部访问 RecordCount 会引发“对象不支持此属性或方法:'RecordCount'”错误。
2) 我已经阅读了有关断开连接的查询,并看到了连接和命令在函数末尾关闭和/或设置为 Nothing 的示例。是否有明确的最佳实践来说明我应该做什么?
3) 使用参数化查询会完全保护我免受 SQL 注入,还是我需要手动删除危险的单词和字符?
function GetContactByUsername(username)
Dim conn, command, param, contact
set conn = server.CreateObject("adodb.connection")
conn.Open Application("DatabaseConnectionString")
Set command = Server.CreateObject("ADODB.COMMAND")
set command.ActiveConnection = conn
command.CommandType = adCmdText
command.CommandText = "Select * from MY_DATABASE.dbo.Contact where Username = ?"
Set param = command.CreateParameter ("Username", adVarWChar, adParamInput, 50)
param.value = username
command.Parameters.Append param
Set contact = Server.CreateObject("ADODB.RECORDSET")
contact.Open command
Response.Write contact.RecordCount '' always -1
set GetContactByPurlCode = contact
end function
dim result
result = GetContactByUsername(Request.QueryString("username"))
if result is Nothing then '' never true
Response.Redirect "/notfound.asp"
end if
FirstName = Trim(result("FirstName"))
LastName = Trim(result("LastName "))
【问题讨论】:
标签: asp-classic ado