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

VB.NET WinForms操作MS Access数据库INSERT语句语法错误求助

问题解决:Access INSERT语句语法错误

直接错误原因

你的SQL语句末尾缺少闭合的右括号——VALUES部分最后只写了'" & chPOE.Checked & "',没有补上),这是触发语法错误的直接原因。

额外问题与优化方案

除了括号问题,代码还存在SQL注入风险、数据类型不匹配问题,建议改用参数化查询,同时修正数据类型处理逻辑:

修正后的代码

Using con As New OleDbConnection(CS)
    Dim cmdText As String = "INSERT INTO Ports ([PortNumber], [DistributionBoardLocation], [DistributionBoardSubLocation], [PortLocation], [PortSubLocation], [PortDevice], [POE]) VALUES (@PortNumber, @DBLocation, @DBSubLocation, @PortLocation, @PortSubLocation, @PortDevice, @POE)"
    Dim cmd As New OleDbCommand(cmdText, con)
    
    ' 按字段类型添加参数,自动处理格式匹配
    cmd.Parameters.Add("@PortNumber", OleDbType.Integer).Value = nudPortNumber.Value
    cmd.Parameters.Add("@DBLocation", OleDbType.VarChar).Value = txtDBLocation.Text
    cmd.Parameters.Add("@DBSubLocation", OleDbType.VarChar).Value = txtDBSubLocation.Text
    cmd.Parameters.Add("@PortLocation", OleDbType.VarChar).Value = txtPortLocation.Text
    cmd.Parameters.Add("@PortSubLocation", OleDbType.VarChar).Value = txtPortSubLocation.Text
    cmd.Parameters.Add("@PortDevice", OleDbType.VarChar).Value = txtPortDevice.Text
    cmd.Parameters.Add("@POE", OleDbType.Boolean).Value = chPOE.Checked
    
    con.Open()
    cmd.ExecuteNonQuery()
    MsgBox("New Port Has Been Created")
End Using

关键说明

  • 参数化查询:彻底避免SQL注入风险,同时自动适配数据类型,无需手动添加单引号等格式符号。
  • Using语句:自动释放数据库连接资源,比手动调用Close()更可靠,防止资源泄漏。
  • 类型匹配:PortNumber为数字类型,直接传入数值即可;POE对应Access的Yes/No类型,用布尔值直接映射无需转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:15:50