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

VB编写SQL查询字符串时双引号转义异常问题解决问询

问题根因

你遇到的问题本质是需要同时满足VB字符串转义规则和SQL语法转义规则两层要求,两类规则的转义逻辑不能混淆:

  1. VB语言中,双引号是字符串字面量的边界符,要在字符串内容里输出1个双引号,需要在代码中写2个连续双引号,编译后只会保留1个双引号在最终的字符串值中。
  2. 标准SQL中,使用单引号包裹的字符串内,双引号属于普通字符,不需要额外转义。

正确写法

方案1:保留XML属性双引号写法

你之前用Chr(34)的写法是可行的,只是你贴的代码漏了VB字符串末尾的闭合双引号,修正后代码如下:

Dim sSql As String
' Chr(34) 对应双引号字符,拼接后最终SQL里只会保留1个双引号
sSql = "SELECT thing FROM example where xml NOT LIKE '%<FUNDED YESNO=" & Chr(34) & "YES" & Chr(34) & ">%'"

用VB原生双引号转义的写法也可以,编译后效果和上面完全一致:

Dim sSql As String
' VB里两个连续双引号最终会转为1个双引号,传到SQL侧就是正确的属性格式
sSql = "SELECT thing FROM example where xml NOT LIKE '%<FUNDED YESNO=""YES"">%'"

方案2:用单引号替换XML属性引号(更省心)

XML规范允许属性使用单引号包裹,你可以直接把属性引号换成单引号,完全避开双引号转义的冲突:

Dim sSql As String
' SQL里单引号包裹的字符串中要输出单引号,只需要写2个连续单引号即可,VB侧不需要额外处理单引号
sSql = "SELECT thing FROM example where xml NOT LIKE '%<FUNDED YESNO=''YES''>%'"

验证方法

拼接完SQL字符串后,可以在VB中用Debug.Print sSql输出最终拼接结果,直接确认传到SQL侧的语句是否符合预期。

注:如果业务场景允许,更推荐使用参数化查询传递LIKE条件,既可以避免SQL注入风险,也不需要手动处理各类字符转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:02