INSERT INTO语句vb.net和访问数据库中的语法错误

时间:2016-08-10 02:19:20

标签: vb.net ms-access

我写的程序(在vb.net中)应该是将文本框中的值加载到数据库中。 但是,当我点击" Save"时,一开始什么都没发生。没有错误,没有通知,没有。所以我使用断点来跟踪它,它得到:

daTraining.Update(dsTraining, "Training")

然后停了下来。 所以我放了一个try / catch,现在当我点击保存时我得到了

System.Data.OleDB.OledgException (0x80040E14): Syntax error in INSERT INTO statement.

我对如何排除故障或问题可能感到困惑。

守则

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

        Try
            Dim cb As New OleDb.OleDbCommandBuilder(daTraining)
            Dim dsNewRow As DataRow
            dsNewRow = dsTraining.Tables("Training").NewRow
            dsNewRow.Item("ID") = txtTrainingID.Text
            dsNewRow.Item("Ranch") = cbRanches.Text
            dsNewRow.Item("Location") = txtLocation.Text
            dsNewRow.Item("Date") = mtbDate.Text
            dsNewRow.Item("StartTime") = mtbStartTime.Text
            dsNewRow.Item("FinishTime") = mtbFinishTime.Text
            dsNewRow.Item("Crew") = txtCrews.Text
            dsNewRow.Item("Supervisor") = txtSupervisor.Text
            dsNewRow.Item("Foreperson") = txtForeperson.Text
            dsNewRow.Item("Activity") = txtActivity.Text
            dsNewRow.Item("Trainer") = txtTrainer.Text
            dsNewRow.Item("Topics") = txtTopics.Text

            dsTraining.Tables("Training").Rows.Add(dsNewRow)
            daTraining.Update(dsTraining, "Training")

            MsgBox("Training Recorded")

            cb.Dispose()


        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try



    End Sub

2 个答案:

答案 0 :(得分:2)

在查询和命令构建器中使用带通配符的数据适配器时,这是一个常见问题。如果一个或多个列名是保留字或包含空格或其他特殊字符,则自动生成的INSERT和UPDATE语句将生成语法错误。

首选解决方案是更改有问题的列名称,但是,如果这不是一个选项,则可以设置命令构建器的QuotePrefixQuoteSuffix属性,以便它会转义生成的操作命令中的所有列名称。适当的值将根据您的数据库而有所不同,但对于Microsoft数据库,请使用" ["和"]"分别

答案 1 :(得分:0)

如评论所示,问题出在

dsNewRow.Item("Date") = mtbDate.Text

Date是保留字。