升级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
相关产品推荐
相关产品推荐

