语法错误INSERT INTO语句(命令生成器)

时间:2015-01-17 12:49:14

标签: database vb.net

好的,我的这个问题在过去的几个月里有点棘手。 摘要:当我的Access数据库中只有5列时,我的代码成功插入了新行。但是当我在访问数据库中添加另一列时(现在将是6列),我遇到了

  

语法错误INSERT INTO语句

代码:

  Dim cb As New OleDb.OleDbCommandBuilder(SYSTEM_MainClient.dbda)
    Dim dsNewRow As DataRow
    dsNewRow = SYSTEM_MainClient.DataSet.Tables("Database").NewRow()
    dsNewRow.Item("First_Name") = TXT_FirstName.Text
    dsNewRow.Item("Last_Name") = TXT_Surname.Text
    dsNewRow.Item("StudentID") = CInt(TXT_StudentID.Text)
    dsNewRow.Item("Middle_Name") = TXT_MiddleName.Text
    dsNewRow.Item("College") = TXT_College.Text
    SYSTEM_MainClient.DataSet.Tables("Database").Rows.Add(dsNewRow)
    SYSTEM_MainClient.dbda.Update(SYSTEM_MainClient.DataSet, "Database")
   MsgBox("New Record added to the Database")

我的数据库cColumns:

"StudentID" (primary key), 
"First_Name", "Last_Name", "Middle_Name"
"College"

结果:这样可以正常工作,并且新记录会添加到数据库中。

因为只有5列。

但如果我超过:

代码:

  Dim cb As New OleDb.OleDbCommandBuilder(SYSTEM_MainClient.dbda)
    Dim dsNewRow As DataRow
    dsNewRow = SYSTEM_MainClient.DataSet.Tables("Database").NewRow()
    dsNewRow.Item("First_Name") = TXT_FirstName.Text
    dsNewRow.Item("Last_Name") = TXT_Surname.Text
    dsNewRow.Item("StudentID") = CInt(TXT_StudentID.Text)
    dsNewRow.Item("Middle_Name") = TXT_MiddleName.Text
    dsNewRow.Item("College") = TXT_College.Text

    dsNewRow.Item("Section") = TXT_Section.Text 'I added a section insert

    SYSTEM_MainClient.DataSet.Tables("Database").Rows.Add(dsNewRow)
    SYSTEM_MainClient.dbda.Update(SYSTEM_MainClient.DataSet, "Database")
   MsgBox("New Record added to the Database")

我的数据库列:

"StudentID" (primary key)
"First_Name", "Last_Name", "Middle_Name"
"College", "Section".

它将返回错误

  

语法错误INSERT INTO语句

它只能插入不超过5列值,我认为问题是访问不是VB本身。

我希望你能理解我的问题,请帮助我几个月来我的问题,我搜索论坛并用Google搜索,仍无法找到答案。

非常感谢你!

1 个答案:

答案 0 :(得分:3)

这种情况几乎普遍发生,因为一个或多个列名是保留字或包含空格或其他特殊字符。在你的情况下,我怀疑“部分”是一个保留字。

解决方案是设置.QuotePrefix对象的.QuoteSuffixOleDbCommandBuilder属性以转义所有列名。对于Access,分别将它们设置为“[”和“]”。