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

升级Visual Studio 17.8后,含FORMAT()的VB Access查询失效

问题分析与解决方案
  • Turno参数缺少引号引发语法错误
    你的SQL语句中,RegProduzione.Turno = " & Form_Sinottico.T_TurnoC.Text & "这部分存在语法问题:如果Turno是文本类型字段,必须为传入的文本值添加单引号。之前Access的SQL解析较为宽松,可能未触发错误,但VS 17.8.0升级后,对应的OLE DB驱动对SQL语法的校验变得严格,直接导致查询失效。修正后该片段应为:

    RegProduzione.Turno = '" & Form_Sinottico.T_TurnoC.Text & "'
    
  • 日期拼接的格式兼容性问题
    直接用#拼接日期字符串的方式,依赖系统区域设置的日期格式规则。VS升级后,运行环境的日期解析逻辑可能发生变化,比如如果T_DataC.Text是dd-mm-yyyy格式,但驱动默认期望mm-dd-yyyy格式,就会导致日期无法被正确识别,进而查询不到数据。

  • 彻底解决:改用参数化查询
    字符串拼接SQL是不良编码习惯,不仅存在SQL注入风险,还极易引发类型、格式相关的兼容问题。使用参数化查询可以从根源上避免这些问题,同时让代码更易维护。示例代码如下:

    ' 定义参数化SQL语句
    Dim rsQry As String = "SELECT FORMAT(RegProduzione.[DATA], 'dd-mm-yyyy') AS DATAG,
    RegProduzione.TURNO, RegProduzione.DISEGNO, RegProduzione.MATRICOLA,
    RegProduzione.Acqua_OK, RegProduzione.ACQUA_NOK, RegProduzione.[Note]
    FROM RegProduzione
    WHERE RegProduzione.Data = @TargetDate AND RegProduzione.Turno = @TargetTurno
    ORDER BY RegProduzione.Data DESC"
    
    ' 创建数据库命令并添加参数
    Dim cmd As New OleDbCommand(rsQry, yourDbConnection)
    ' 解析日期文本为DateTime类型,避免格式问题
    cmd.Parameters.AddWithValue("@TargetDate", DateTime.Parse(Form_Sinottico.T_DataC.Text))
    cmd.Parameters.AddWithValue("@TargetTurno", Form_Sinottico.T_TurnoC.Text)
    
    ' 填充DataAdapter
    Dim da As New OleDbDataAdapter(cmd)
    Dim resultTable As New DataTable()
    da.Fill(resultTable)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:25