VB.Net执行Access更新查询拼接字段报错但Access内正常,如何解决
问题解决:VB.Net调用Access更新查询字段拼接报错
问题原因
报错核心是ACE/Jet OLEDB驱动与Access原生环境的语法解析逻辑差异:Access原生查询解析器默认支持
&作为字符串拼接符,但通过ADO直接调用查询名时,若未显式指定命令类型,驱动会将传入的内容作为SQL文本解析,此时&会被识别为非法语法,触发无效SQL语句报错。
可行解决方案
方案1:修改Access存储的更新查询逻辑(兼容性最高)
将你原来「更新到」中的[table].[field1] & [table].[field2]替换为以下兼容写法,不需要改VB调用代码即可正常运行:Nz(CStr([table].[field1]), '') + Nz(CStr([table].[field2]), '')
相关说明:CStr将字段显式转为字符串类型,避免数字类型字段拼接出错Nz函数将Null值转为空字符串,避免出现Null拼接后整体返回Null的问题+是ADO驱动可正常识别的字符串拼接运算符- 若你的Access版本为2019/365及以上,也可以直接用
CONCAT([table].[field1], [table].[field2]),写法更简洁,也兼容ADO调用逻辑。
方案2:修改VB调用代码(不需要改动Access原有查询)
不要直接用连接对象的Execute方法传查询名执行,改用Command对象显式指定命令类型为存储查询,驱动就会用Access原生语法解析原有拼接逻辑:
Dim updateCmd As New ADODB.Command With updateCmd .ActiveConnection = dbCustSpec_ADO .CommandText = "table_upt" .CommandType = ADODB.CommandTypeEnum.adCmdStoredProc .Execute() End With ' 执行完成后按需释放Command对象 Set updateCmd = Nothing
内容的提问来源于stack exchange,提问作者MK01111000
相关产品推荐
相关产品推荐

