You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6.0连接Oracle 11g执行查询时遇ORA-00911无效字符错误求助

解决方案:VB6连接Oracle 11g处理含&的IN条件

优先方案:使用参数化查询(推荐)

直接拼接SQL不仅易引发语法错误,还存在SQL注入风险,参数化查询可彻底规避这些问题:

Dim cmd As New ADODB.Command
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "你的Oracle连接字符串"

With cmd
    .ActiveConnection = conn
    .CommandText = "SELECT * FROM 表名 WHERE 字段名 IN (:param1, :param2)"
    ' 添加参数,值含&无需特殊处理
    .Parameters.Append .CreateParameter("param1", adVarChar, adParamInput, 50, "A&B")
    .Parameters.Append .CreateParameter("param2", adVarChar, adParamInput, 50, "C&D")
    
    Dim rs As ADODB.Recordset
    Set rs = .Execute
    ' 处理结果集
    rs.Close
    Set rs = Nothing
End With

conn.Close
Set conn = Nothing
Set cmd = Nothing

若必须拼接SQL:正确转义单引号和&符号

因特殊需求需拼接SQL时,需注意两点:

  • VB6中字符串内的单引号需用两个连续单引号转义(Oracle识别为一个实际单引号)
  • 用Oracle的chr(38)生成&字符,避免与VB6的&字符串连接符冲突

示例代码:

Dim conn As ADODB.Connection
Dim sqlStr As String
Dim rs As ADODB.Recordset

Set conn = New ADODB.Connection
conn.Open "你的Oracle连接字符串"

' 示例IN条件值
Dim value1 As String: value1 = "A&B"
Dim value2 As String: value2 = "C&D"

' 转义单引号后拼接
sqlStr = "SELECT * FROM 表名 WHERE 字段名 IN ('" & Replace(value1, "'", "''") & "', '" & Replace(value2, "'", "''") & "')"
' 若&为动态生成,也可直接嵌入chr(38)
' sqlStr = "SELECT * FROM 表名 WHERE 字段名 IN ('A' || chr(38) || 'B', 'C' || chr(38) || 'D')"

Set rs = conn.Execute(sqlStr)
' 处理结果集
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

额外选项:关闭Oracle变量解析(不推荐)

若不想处理&符号,可先执行SET DEFINE OFF关闭Oracle对&作为变量占位符的解析,但可能影响其他依赖变量的SQL,谨慎使用:

conn.Execute "SET DEFINE OFF"
' 再执行目标查询SQL

内容的提问来源于stack exchange,提问作者dandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:01:05