我在URL中传递了两(2)个参数,并构建了以下SQL:
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num =" & request.querystring("num") & "AND name LIKE" & request.querystring("nam")
我收到错误消息:
Microsoft OLE DB Provider for Oracle错误' 80040e14'
ORA-00933:SQL命令未正确结束
这是什么样的语法?
答案 0 :(得分:4)
您需要在LIKE子句周围加上引号。此外,您可以考虑使用百分比进行通配符匹配
mQry = "SELECT DISTINCT name FROM link3 WHERE invoice_num =" & request.querystring("num") & " AND name LIKE '%" & request.querystring("nam") & "%' "
答案 1 :(得分:0)
您的部分问题可能是您在插入值时引号周围的不正确间距。这样:
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 is probably right - 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上的一些信息。