部分您的问题,可绕在那里你插入值引号的间距不当。这:
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或任何其他非数字类型,那么您将需要用引号将值包围,就像任何其他文本值一样。
而且,虽然没有涉及到这个问题,我希望这是一个过于简单化的例子,你不能直接插入查询字符串值到SQL语句。如果你还没有被告知,那么这会给你带来各种各样的安全问题 - 在SQL Injection上查找一些信息。
当我使用你给我的代码时,我得到了另一个错误,如下所述:Microsoft OLE DB Provider for Oracle错误'80040e07' ORA-01722:无效号码 –
@RallyCautiverio是发票号码和实际数值吗?这就是你的问题所暗示的,所以答案是如何格式化的。 – AnonJr
是的,这是... invoice_num是一个实际的数值... –