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

时间:2015-03-06 22:53:04

标签: mysql sql vb.net ms-access ms-access-2013

再次原谅我再问这个愚蠢的问题,但是...我真的无法弄清楚如何在插入值时解决这个另一个语法错误

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

字段 - 数据类型

否 - 数字

RANK - 短文

最后一个名字 - 短文

第一个名字 - 短文

MIDDLE NAME - 短文

ADDRESS - 短文

联系号码 - 短文

ACCNT CODE - 短文

单位代码 - 编号

ATM ACCNT NUMBER - 号码

PENSION TYPE - 短文

备注 - 短文

这是我的代码:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:0)

哈哈:)好的,我弄清楚了我的问题。我只需要将文本框的内容转换为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注入