【发布时间】:2010-07-12 20:55:05
【问题描述】:
[撤回问题:问题是由于未转义以 Web 表单提交的值。 ASP 脚本删除了未转义的空格,从而导致了问题。]
在网页中,我尝试使用 VBScript 对 MS SQL Server 中的表进行搜索。搜索使用LIKE 子句(带有通配符)。如果输入中没有空格,则搜索工作正常。但是,如果输入中有空格,则搜索不会返回任何内容。
例如,如果我搜索 IT Department 我什么也得不到,但如果我搜索 Department 我会得到 IT Department。不知何故,IT 和 Department 之间的空格引起了麻烦。如果我使用 SQL Server Management Studio 直接针对服务器运行脚本,则使用 IT Department 的搜索会返回正确的结果。
另外,如果我不使用 SQL 占位符参数,而是直接输入搜索字符串,则搜索有效。
仅在搜索字符串包含空格并在搜索失败时使用占位符的情况下。
这是我正在使用的代码:
Dim oCmd, OffDescParam, description, query
description = "IT Department"
Set oCmd = Server.CreateObject("ADODB.Command")
OffDescParam = "%" & description & "%"
Set objOffDescParam = _
oCmd.CreateParameter("@offdesc", adChar, adParamInput, Len(OffDescParam), OffDescParam)
query = "SELECT OfficialDescription " & _
"FROM [MyDatabase].[dbo].[Organizations] " & _
"WHERE (OfficialDescription LIKE ?)" & _
"ORDER BY OfficialDescription"
' If I use "WHERE (OfficialDescription LIKE '%IT Department%')" it works.
oCmd.ActiveConnection = "some/connection/string"
oCmd.ActiveConnection.CursorLocation = adUseClient
oCmd.CommandType = adCmdText
oCmd.CommandText = query
oCmd.Parameters.Append objOffDescParam
oCmd.Prepared = True
Set oRst = CopyRecordSet(oCmd.Execute)
oCmd.ActiveConnection.close
【问题讨论】:
-
撤回问题:问题源于未转义以 Web 表单提交的值。 ASP 脚本删除了未转义的空格,从而导致了问题。
标签: sql-server vbscript sql-like