Sql 为什么我会得到;INSERT INTO语句“中的语法错误”;?

Sql 为什么我会得到;INSERT INTO语句“中的语法错误”;?,sql,vb.net,ms-access,oledb,insert-into,Sql,Vb.net,Ms Access,Oledb,Insert Into,不知道我做错了什么。这是从各种文本框、组合框等添加到Access数据库的过程。当在具有输入的窗体上按下按钮时,此过程将运行。我是vb.net和编程的初学者,所以如果这是显而易见的事情,我道歉 谢谢在MS Access Jet Sql中保留了单词位置。这就是语法错误的原因。 如果要将其用作列或表的名称,则需要将其置于方括号之间 Private Sub Save_Record() Dim conn As New OleDbConnection Dim cmd As New OleDb

不知道我做错了什么。这是从各种文本框、组合框等添加到Access数据库的过程。当在具有输入的窗体上按下按钮时,此过程将运行。我是vb.net和编程的初学者,所以如果这是显而易见的事情,我道歉


谢谢

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

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
这其中的一部分你还有另一个问题。OleDb无法通过名称识别参数。通常,您应该使用问号而不是名称,但Access允许使用问号,这可能是因为它的大表兄Sql Server具有某种可移植性。在任何情况下,您都应该按照命名占位符在查询中显示的相同顺序在OleDbCommand集合中添加参数。所以你需要这个订单:

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"
只有在具有不用于插入的更新路径时,才应添加最后一个参数。(假设ID列为自动递增列)

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
If Me.txt_Forename.Tag <> 0 Then
   cmd.Parameters.Add("@ID", OleDbType.Numeric).Value = Me.txt_Forename.Tag
End If
   If Me.txt_Forename.Tag = 0 Then
        cmd.Parameters.Clear()
        cmd.CommandText = "Select @@Identity"
        Me.txt_Forename.Tag = cmd.ExecuteScalar()
    End If