1

我在 URL 中传递了两 (2) 个参数,并构建了以下 SQL:

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num ="  & request.querystring("num") & "AND name LIKE" & request.querystring("nam")

我收到一条错误消息:

用于 Oracle 错误“80040e14”的 Microsoft OLE DB 提供程序

ORA-00933: SQL 命令未正确结束

什么是正确的语法?

4

2 回答 2

4

您需要在 LIKE 子句周围加上引号。此外,您可以考虑使用百分比进行通配符匹配

mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num =" & request.querystring("num") & " AND name LIKE '%" & request.querystring("nam") & "%' "
于 2013-08-28T02:07:26.630 回答
1

您的部分问题可能是插入值的引号周围的间距不正确。这个:

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的一些信息。

于 2013-08-28T13:59:55.117 回答