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

Mysql 在INSERT INTO语句中插入值时出现语法错误-VB和ACCESS 2013,mysql,sql,vb.net,ms-access,ms-access-2013,Mysql,Sql,Vb.net,Ms Access,Ms Access 2013,请原谅我再次问这个愚蠢的问题,但是。。。我真的不知道如何解决这个问题,插入值时的另一个语法错误 在我的数据库(access 2013)中,我的表中有以下字段 字段-数据类型 无编号 排名-短文本 姓氏-短文本 名字-短文本 中间名-短文本 地址-短文本 联系电话-短文本 帐户代码-短文本 单位代码-编号 自动取款机帐号 养老金类型-短文本 备注-短文 这是我的密码: Imports System.Data.OleDb Public Class Form2 Private Sub Butt

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

在我的数据库(access 2013)中,我的表中有以下字段

字段-数据类型

无编号

排名-短文本

姓氏-短文本

名字-短文本

中间名-短文本

地址-短文本

联系电话-短文本

帐户代码-短文本

单位代码-编号

自动取款机帐号

养老金类型-短文本

备注-短文

这是我的密码:

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

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

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

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

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

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

哈哈:)好的,我解决了我的问题。我只需要将文本框的内容转换为int,int被认为是数据类型为number的字段的插入值

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注入


如何将查询参数化

您可以使用类似于以下内容的代码:

使用cmd作为新的OleDbCommand
cmd.Connection=con
cmd.CommandText=
“插入退休人员(【编号】、【等级】、【姓】、【名】、【中间名】、【地址】、【联系电话】、【账户代码】、【单位代码】、【ATM账号】、【养老金类型】、【备注】)&
“值(?,,,,,,,,,,,,,,,,,,,,,,?”
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'[姓氏]
' ... 等等
cmd.Parameters.Add(“?”,OleDbType.VarWChar,255)。Value=TextBox1.Text'[备注]
cmd.ExecuteNonQuery()
终端使用

如果使用
参数化查询
您可能会修复错误,并失去SQL注入攻击的风险。考虑到您组装查询的方式,您将容易因数据内容而发生各种错误。从显示给您一个错误的实际查询开始,然后从那里开始工作。如何将我的查询参数化??以及如何显示给出错误的实际查询。对不起,我不懂用vb编程。我希望你能给我解释一下。提前感谢它的副本可以考虑重复,但我的问题是我插入的值。它给了我一个语法错误消息