串联字符串导致 ORA-00911:无效字符错误

Concatenated string results in ORA-00911: Invalid Character error

提问人:dandy 提问时间:9/27/2023 最后编辑:StayOnTargetdandy 更新时间:9/28/2023 访问量:78

问:

我正在使用 vb6.0 运行查询。 数据库是 Oracle 11g。

代码是这样的:

dim strSearch as string
dim sqlSearch as string
dim rsSearch as new adodb.recordset
dim Connect2Oracle as new Adodb.connection

Connect2Oracle.ConnectionString="provider=MSDAORA.1;User ID=xxxxxx........
connect2Oracle.open

strSearch="('B&M','WC&S','DC-9')"

sqlSearch="Select SL_NO from Party where Code in " & strSearch & ";""

rs.open sqlSearch, Connect2Oracle, adOpenForwardOnly, adLockReadOnly, adCmdText

我收到 ORA-00911:无效字符错误。

如果我用 & 替换 & 符号,查询在 Toad 上运行,但在 VB6.0 中出现错误。|| chr(38) ||

strSearch=('B'|| chr(38) || 'M','WC' || chr(38) || 'S','DC-9')

我知道这与单引号有关,当我用 .|| chr(38) ||

我似乎无法弄清楚如何解决这个问题。

任何支持、建议和意见都非常感谢。

花花公子

甲骨文11g VB6

评论

0赞 Alex Poole 9/27/2023
应该用双引号引起来 - 即 ?尾随真的应该在那里吗?目前尚不清楚为什么要像这样构建查询,但如果计划使用变量而不是固定值,那么您应该喜欢绑定变量和集合,而不是冒着 SQL 注入的风险。(与号不太可能成为问题;一些客户用它来标记替换变量,我怀疑这适用于这里。strSearchstrSearch="('B&M','WC&S','DC-9')"& "
0赞 dandy 9/27/2023
@AlexPoole我正在通过代码构建strSearch。此外,字符串列表中的 & 来自表。由于 strSearch 声明为字符串,因此不需要双引号。但是 & 会产生一个问题,因为 Oracle 将其视为一个变量,需要由用户输入。遗憾的是,ADODB 无法很好地解释错误,并返回 ORA-00911:无效字符错误。有趣的是,如果我从我的代码中复制查询并在Toad中运行它(在通过代码填充strSearch之后),它会执行而不会出现任何错误,并返回所需的行和值。
0赞 dandy 9/27/2023
@AlexPoole。前段时间我发布了一个关于在运行时构建类似搜索字符串的问题......这里 stackoverflow.com/revisions/76857063/2
0赞 Brian M Stafford 9/27/2023
这可能无法解决问题,但最后一个代码片段可能需要更像这样: .strSearch = "('B'||" & Chr(38) & "|| 'M','WC' ||" & Chr(38) & "|| 'S','DC-9')"
2赞 StayOnTarget 9/28/2023
这是你的真实代码吗?因为如果 RHS 不在双引号中,我什至认为它不会编译。调试可能被复制和粘贴错误的东西是没有意义的。strSearch=

答: 暂无答案