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

