在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013

Posted

技术标签:

【中文标题】在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013【英文标题】:Syntax error in inserting values in INSERT INTO statement. -VB and ACCESS 2013 【发布时间】:2015-03-06 22:53:03 【问题描述】:

再次原谅我再次提出这个愚蠢的问题,但是......我真的不知道如何解决插入值时的另一个语法错误

在我的数据库中(访问 2013)我的表中有这个字段

字段 - 数据类型

否 - 号码

RANK - 短文本

姓氏 - 短文本

名字 - 短文本

中间名 - 短文本

地址 - 短文本

联系电话 - 短文本

ACCNT 代码 - 短文本

单位代码 - 编号

ATM ACCNT NUMBER - 号码

养老金类型 - 短文本

备注 - 短文本

这是我的代码:

Imports System.Data.OleDb

Public Class Form2

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim con As New OleDbConnection
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Retiree.accdb"

    Dim cmd As New OleDb.OleDbCommand
    If Not con.State = ConnectionState.Open Then
      con.Open()
    End If
    cmd.Connection = con
    cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & TextBox14.Text & "," & TextBox13.Text & ",'" & TextBox12.Text & "','" & TextBox1.Text & "')"

    cmd.ExecuteNonQuery()
    con.Close()
    Me.Close()

  End Sub
End Class

【问题讨论】:

如果您使用Parameterized Query,您可能会修复错误并失去 SQL 注入攻击的风险。 鉴于您组装查询的方式,您将容易受到由于数据内容而发生的各种错误的影响。首先显示给你一个错误的实际查询,然后从那里开始工作。 如何参数化我的查询?以及如何显示给出错误的实际查询。对不起,我不擅长用 vb 编程。我希望你能为我解释一下。提前谢谢 Syntax error in INSERT INTO statement. (VB and ACCESS 2013)的可能重复 它可能认为是重复的,但我的问题是我插入的值。它给了我一个语法错误信息 【参考方案1】:

如何参数化我的查询??

你可以使用类似这样的代码:

Using cmd As New OleDbCommand
    cmd.Connection = con
    cmd.CommandText =
            "INSERT INTO Retiree ([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) " &
            "VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"
    cmd.Parameters.Add("?", OleDbType.Integer).Value = num  ' [NO]
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox4.Text  ' [RANK]
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox3.Text  ' [LAST NAME]
    ' ... and so on
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox1.Text  ' [REMARKS]
    cmd.ExecuteNonQuery()
End Using

【讨论】:

【参考方案2】:

文本框和富文本框的内容可能会导致语法错误。这是我的建议:

编辑插入语句,不要包含任何文本框或富文本值,只需对这些列使用“”(空字符串)。如果有效,则表示文本框或富文本框的内容导致语法错误。

开始添加回文本框和富文本值,一次一个,直到出现语法错误。然后你会看到是哪一个导致了问题。很有可能是富文本框。

这不是编写插入语句的好方法,因为如果用户在任何文本框中加上单引号,就会出现 SQL 语法错误。您需要在代码中从用户输入的数据中删除单引号,或者更好地为用户输入的数据使用参数,这样它就不会影响语句的语法。

如果所有其他方法都失败,请在执行该行代码之后但在执行 cmd.ExecuteNonQuery() 之前向我们提供 cmd.CommandText 属性的内容,这样我们就可以看到正在执行的完整且真实的 SQL 语句,然后我们可以看到语法错误。

【讨论】:

【参考方案3】:

哈哈 :) 好的,我知道我的问题了。我只需要将文本框的内容转换为 int,即假定为数据类型为数字的字段的插入值

cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & Convert.ToInt32(TextBox14.Text) & "," & Convert.ToInt32(TextBox13.Text) & ",'" & TextBox12.Text & "','" & TextBox1.Text & "') "

但我仍然想知道如何将其参数化以防止 sql 注入

【讨论】:

以上是关于在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013的主要内容,如果未能解决你的问题,请参考以下文章

执行 INSERT INTO 语句时出现语法错误

将记录添加到 Access 数据库时出现“INSERT INTO 语句中的语法错误”

SQL INSERT INTO 语句:向表中插入新记录语法及案例剖析

SQL INSERT INTO 语句

8.INSERT INTO 语句 UPDATE 语句

数据库之查询语句