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

Access数据库INSERT语句语法错误排查请求(附VB代码示例)

问题排查与解决

错误点分析

  • 重复SQL关键字:原语句中INSERT INTO into多写了一个into,这是触发语法错误的直接原因。
  • 字段名格式错误:Access数据库中,包含空格的字段名必须用方括号[]包裹,否则无法识别,比如Service Name要写成[Service Name]。
  • 字符串参数未转义:txtdes.Text是字符串类型,直接拼接进SQL语句时没有加单引号,会导致语法错误,还存在SQL注入风险。
  • 类型转换不规范:Val(txtcost.Text)的转换方式不够严谨,容易出现类型不匹配问题。

修正后的代码(使用参数化查询,推荐方案)

参数化查询既能避免语法错误,又能彻底杜绝SQL注入,是操作数据库的标准做法:

Try
    con.Open()
    ' 修正SQL语句结构,使用参数占位符
    sql = "INSERT INTO Services([Service Name], [Service Cost], [Description]) VALUES (?, ?, ?)"
    cmd.Connection = con
    cmd.CommandText = sql
    ' 添加参数,指定对应类型和值
    cmd.Parameters.AddWithValue("@ServiceName", txtname.Text)
    cmd.Parameters.AddWithValue("@ServiceCost", If(IsNumeric(txtcost.Text), CDbl(txtcost.Text), 0))
    cmd.Parameters.AddWithValue("@Description", txtdes.Text)
    
    i = cmd.ExecuteNonQuery
    If i > 0 Then
        MsgBox("新记录插入成功!")
    Else
        MsgBox("未插入任何记录!")
    End If
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    con.Close()
End Try

临时修复方案(仅修正语法,不推荐,仍有注入风险)

如果暂时不想用参数化,至少修正语法问题:

Try
    con.Open()
    ' 去掉重复的into,给含空格字段加方括号,字符串参数加单引号
    sql = "INSERT INTO Services([Service Name], [Service Cost], [Description]) VALUES ('" & txtname.Text & "', " & Val(txtcost.Text) & ", '" & txtdes.Text & "')"
    cmd.Connection = con
    cmd.CommandText = sql
    i = cmd.ExecuteNonQuery
    If i > 0 Then
        MsgBox("新记录插入成功!")
    Else
        MsgBox("未插入任何记录!")
    End If
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    con.Close()
End Try

内容的提问来源于stack exchange,提问作者Loreto High School

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:24:56