您的部分问题可能是插入值的引号周围的间距不正确。这个:
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num =" & request.querystring("num") & "AND name LIKE" & request.querystring("nam")
很可能会导致将其发送到数据库:
SELECT DISTINCT name
FROM link3
WHERE invoice_num =2AND name LIKEsomeothervalue
如果您像这样添加适当的间距:
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = " & request.querystring("num") & " AND name LIKE " & request.querystring("nam")
它会给你一个格式更正确的结果,如下所示:
SELECT DISTINCT name
FROM link3
WHERE invoice_num = 2 AND name LIKE someothervalue
每当我收到表明 SQL 格式/结构存在问题的错误时,我倾向于在发送到数据库之前记录发送的 SQL。这有助于发现类似的奇怪问题。
此外,sharpguru 可能是正确的——该LIKE
子句的格式也可能不正确。您需要将文本值括在单引号中,并且%
是一个匹配 0 个或更多字符的通配符 - 使其更像您可能正在寻找的内容:
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = " & request.querystring("num") & " AND name LIKE '%" & request.querystring("nam") & "%'"
现在,这确实假设这invoice_num
是某种数值 - 这在您的问题和代码中隐含。但是,如果不是(如您的评论和其他问题所建议的那样),您需要将值放在单引号中 - 就像几乎所有 RDBMS 中的任何其他文本字段一样:
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num = '" & request.querystring("num") & "' AND name LIKE '%" & request.querystring("nam") & "%'"
invoice_num
如果数据库列的数据类型设置为非数字数据类型,也将使用上述内容。仅仅因为数据是可以称为数字的,并不意味着它会自动被视为数字。如果列的数据类型是 text、ntext 或任何其他非数字类型,那么您需要将值括在引号中,就像任何其他文本值一样。
而且,虽然与问题无关,但我希望这是一个过于简单的示例,并且您没有直接将 QueryString 值插入 SQL 语句。如果您还没有被告知,那会让您面临各种各样的安全问题 - 查找有关SQL Injection的一些信息。