为什么会出现“ INSERT INTO语句中的语法错误”?

用户4371623
Private Sub Save_Record()
    Dim conn As New OleDbConnection
    Dim cmd As New OleDbCommand
    Dim sSQL As String = String.Empty

    Try
        conn = New OleDbConnection(Get_Constring)
        conn.Open()
        cmd.Connection = conn
        cmd.CommandText = CommandType.Text

        If Me.txt_Forename.Tag = 0 Then
            sSQL = "INSERT INTO PlayerDatabase ( Age_Group, Surname, Forename, Rating, DOB, Address, Email, Position, Foot, Mins_Played, Goals, Assists, Yellow_Cards, Red_Cards)"
            sSQL = sSQL & "  VALUES(@Age_Group, @Surname, @Forename, @Rating, @DOB, @Address, @Email, @Position, @Foot, @Mins_Played, @Goals, @Assists, @Yellow_Cards, @Red_Cards)"

        Else
            sSQL = "UPDATE PlayerDatabase set Age_Group = @Age_Group, Surname = @Surname, Forename = @Forename, Rating = @Rating, DOB = @DOB, Address = @Address, Email = @Email, Position = @Position, Foot = @Foot, Mins_Played = @Mins_Played, Goals = @Goals, Assists = @Assists, Yellow_Cards = @Yellow_Cards, Red_Cards = @Red_Cards WHERE ID = @id"
            cmd.CommandText = sSQL
        End If


        cmd.Parameters.Add("@Surname", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Surname.Text)) > 0, Me.txt_Surname.Text, DBNull.Value)
        cmd.Parameters.Add("@Forename", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Forename.Text)) > 0, Me.txt_Forename.Text, DBNull.Value)

        cmd.Parameters.Add("@DOB", OleDbType.Date).Value = Me.dtp_DOB.Text
        cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = Me.txt_Address.Text
        cmd.Parameters.Add("@Age_Group", OleDbType.VarChar).Value = Me.cb_AgeGroup.Text
        cmd.Parameters.Add("@Rating", OleDbType.VarChar).Value = Me.cb_Rating.Text
        cmd.Parameters.Add("@Email", OleDbType.VarChar).Value = Me.txt_Email.Text
        cmd.Parameters.Add("@Position", OleDbType.VarChar).Value = Me.cb_Position.Text
        cmd.Parameters.Add("@Foot", OleDbType.VarChar).Value = Me.cb_Foot.Text
        cmd.Parameters.Add("@Mins_Played", OleDbType.VarChar).Value = Me.nup_MinsPlayed.Text
        cmd.Parameters.Add("@Goals", OleDbType.VarChar).Value = Me.nup_Goals.Text
        cmd.Parameters.Add("@Assists", OleDbType.VarChar).Value = Me.nup_Assists.Text
        cmd.Parameters.Add("@Yellow_Cards", OleDbType.VarChar).Value = Me.nup_YellowCards.Text
        cmd.Parameters.Add("@Red_Cards", OleDbType.VarChar).Value = Me.nup_RedCards.Text
        cmd.Parameters.Add("@ID", OleDbType.Numeric).Value = Me.txt_Forename.Tag
        cmd.ExecuteNonQuery()

        If Me.txt_Forename.Tag = 0 Then
            cmd.CommandText = "Select @@Identity"
            Me.txt_Forename.Tag = cmd.ExecuteScalar()
        End If
        MsgBox("Data has been saved.")

    Catch ex As Exception
        MsgBox(ErrorToString)
    Finally
        conn.Close()
    End Try
End Sub

不知道我在做什么错。这是从各种文本框,组合框等向Access数据库添加的内容。当在具有输入的表单上按下按钮时,将运行此过程。我是vb.net和程序设计的初学者,所以如果很明显,我对此表示歉意。

谢谢

史蒂夫

单词POSITION在MS-Access Jet Sql中保留。这是语法错误的原因。
如果要将其用作列或表的名称,则需要将其放在方括号之间

sSQL = "INSERT INTO PlayerDatabase ( Age_Group, Surname, Forename, Rating, DOB, " & _ 
      "Address, Email, [Position], Foot, Mins_Played, Goals, Assists, Yellow_Cards, Red_Cards)"
....
sSQL = "UPDATE PlayerDatabase set Age_Group = @Age_Group, Surname = @Surname, " & _
       "Forename = @Forename, Rating = @Rating, DOB = @DOB, Address = @Address, " & _ 
       "Email = @Email, [Position] = @Position, Foot = @Foot, Mins_Played = @Mins_Played, " & _ 
       "Goals = @Goals, Assists = @Assists, Yellow_Cards = @Yellow_Cards, " & _ 
       "Red_Cards = @Red_Cards WHERE ID = @id"

一部分,您还有另一个问题。OleDb无法通过参数名称识别参数。通常,您应该使用问号而不是名称,但是Access允许此标记可能是对它的大表弟Sql Server的某种可移植性。无论如何,您都应按照在查询中命名的占位符出现的顺序,将参数添加到OleDbCommand集合中。因此,您需要以下命令:

cmd.Parameters.Add("@Age_Group", OleDbType.VarChar).Value = Me.cb_AgeGroup.Text
cmd.Parameters.Add("@Surname", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Surname.Text)) > 0, Me.txt_Surname.Text, DBNull.Value)
cmd.Parameters.Add("@Forename", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Forename.Text)) > 0, Me.txt_Forename.Text, DBNull.Value)
cmd.Parameters.Add("@Rating", OleDbType.VarChar).Value = Me.cb_Rating.Text
cmd.Parameters.Add("@DOB", OleDbType.Date).Value = Me.dtp_DOB.Text
cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = Me.txt_Address.Text
cmd.Parameters.Add("@Email", OleDbType.VarChar).Value = Me.txt_Email.Text
cmd.Parameters.Add("@Position", OleDbType.VarChar).Value = Me.cb_Position.Text
cmd.Parameters.Add("@Foot", OleDbType.VarChar).Value = Me.cb_Foot.Text
cmd.Parameters.Add("@Mins_Played", OleDbType.VarChar).Value = Me.nup_MinsPlayed.Text
cmd.Parameters.Add("@Goals", OleDbType.VarChar).Value = Me.nup_Goals.Text
cmd.Parameters.Add("@Assists", OleDbType.VarChar).Value = Me.nup_Assists.Text
cmd.Parameters.Add("@Yellow_Cards", OleDbType.VarChar).Value = Me.nup_YellowCards.Text
cmd.Parameters.Add("@Red_Cards", OleDbType.VarChar).Value = Me.nup_RedCards.Text

仅当您具有INSERT的UPDATE路径时,才应添加此最后一个参数。(假设ID列为“自动递增”)

If Me.txt_Forename.Tag <> 0 Then
   cmd.Parameters.Add("@ID", OleDbType.Numeric).Value = Me.txt_Forename.Tag
End If

最后,当您尝试读取@@ IDENTITY值时,这也是另一个问题。使用相同的命令很好,但是您需要清除参数集合

   If Me.txt_Forename.Tag = 0 Then
        cmd.Parameters.Clear()
        cmd.CommandText = "Select @@Identity"
        Me.txt_Forename.Tag = cmd.ExecuteScalar()
    End If

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在INSERT INTO语句中出现语法错误?

来自分类Dev

INSERT INTO语句中的C#语法错误。我没看到什么吗?

来自分类Dev

INSERT INTO语句中的语法错误

来自分类Dev

在INSERT INTO语句中获取语法错误

来自分类Dev

OleDbException: INSERT INTO 语句中的语法错误

来自分类Dev

MySQL INSERT INTO 语句中的语法错误

来自分类Dev

为什么在 elif 语句中出现语法错误?

来自分类Dev

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

来自分类Dev

INSERT INTO 语句中的语法错误 Insert in Access

来自分类Dev

OleDbCommandBuilder生成的INSERT INTO语句中的语法错误

来自分类Dev

OleDbCommandBuilder生成的INSERT INTO语句中的语法错误

来自分类Dev

asp.net中的INSERT INTO语句中的语法错误

来自分类Dev

插入MS Access的INSERT语句中的语法错误

来自分类Dev

INSERT INTO语句中的语法错误。(VB和ACCESS 2013)

来自分类Dev

.net,MS Access,INSERT INTO语句中的语法错误

来自分类Dev

使用Access和Pyodbc的INSERT语句中的语法错误

来自分类Dev

insert into 语句中的语法错误 - 在 VB.NET 中

来自分类Dev

该查询在Access 2010中可以完美运行,但是当我尝试在代码中执行该查询时,INSERT INTO语句中出现语法错误

来自分类Dev

尝试将if语句放入触发器时,为什么会出现语法错误?

来自分类Dev

Access 2013:为什么会出现此语法错误?

来自分类Dev

为什么会出现语法错误:缺少';' 在“ *”之前

来自分类Dev

为什么使用exec()会出现语法错误?

来自分类Dev

为什么重启后会出现语法错误?

来自分类Dev

为什么备用语法switch语句中的输出会导致语法错误

来自分类Dev

错误:command.ExecuteNonQuery()中的INSERT INTO语句中的语法错误

来自分类Dev

INSERT INTO语句中的语法错误。在Access中运行,而不在VB中运行

来自分类Dev

INSERT INTO语句中的语法错误。在VB.net 2005中

来自分类Dev

在Access 2010中的INSERT INTO语句中获取SQL语法错误

来自分类Dev

参数化的INSERT INTO语句中的VB.NET语法错误

Related 相关文章

  1. 1

    为什么在INSERT INTO语句中出现语法错误?

  2. 2

    INSERT INTO语句中的C#语法错误。我没看到什么吗?

  3. 3

    INSERT INTO语句中的语法错误

  4. 4

    在INSERT INTO语句中获取语法错误

  5. 5

    OleDbException: INSERT INTO 语句中的语法错误

  6. 6

    MySQL INSERT INTO 语句中的语法错误

  7. 7

    为什么在 elif 语句中出现语法错误?

  8. 8

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

  9. 9

    INSERT INTO 语句中的语法错误 Insert in Access

  10. 10

    OleDbCommandBuilder生成的INSERT INTO语句中的语法错误

  11. 11

    OleDbCommandBuilder生成的INSERT INTO语句中的语法错误

  12. 12

    asp.net中的INSERT INTO语句中的语法错误

  13. 13

    插入MS Access的INSERT语句中的语法错误

  14. 14

    INSERT INTO语句中的语法错误。(VB和ACCESS 2013)

  15. 15

    .net,MS Access,INSERT INTO语句中的语法错误

  16. 16

    使用Access和Pyodbc的INSERT语句中的语法错误

  17. 17

    insert into 语句中的语法错误 - 在 VB.NET 中

  18. 18

    该查询在Access 2010中可以完美运行,但是当我尝试在代码中执行该查询时,INSERT INTO语句中出现语法错误

  19. 19

    尝试将if语句放入触发器时,为什么会出现语法错误?

  20. 20

    Access 2013:为什么会出现此语法错误?

  21. 21

    为什么会出现语法错误:缺少';' 在“ *”之前

  22. 22

    为什么使用exec()会出现语法错误?

  23. 23

    为什么重启后会出现语法错误?

  24. 24

    为什么备用语法switch语句中的输出会导致语法错误

  25. 25

    错误:command.ExecuteNonQuery()中的INSERT INTO语句中的语法错误

  26. 26

    INSERT INTO语句中的语法错误。在Access中运行,而不在VB中运行

  27. 27

    INSERT INTO语句中的语法错误。在VB.net 2005中

  28. 28

    在Access 2010中的INSERT INTO语句中获取SQL语法错误

  29. 29

    参数化的INSERT INTO语句中的VB.NET语法错误

热门标签

归档