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

