我写的程序(在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
答案 0 :(得分:2)
在查询和命令构建器中使用带通配符的数据适配器时,这是一个常见问题。如果一个或多个列名是保留字或包含空格或其他特殊字符,则自动生成的INSERT和UPDATE语句将生成语法错误。
首选解决方案是更改有问题的列名称,但是,如果这不是一个选项,则可以设置命令构建器的QuotePrefix
和QuoteSuffix
属性,以便它会转义生成的操作命令中的所有列名称。适当的值将根据您的数据库而有所不同,但对于Microsoft数据库,请使用" ["和"]"分别
答案 1 :(得分:0)
如评论所示,问题出在
dsNewRow.Item("Date") = mtbDate.Text
Date
是保留字。