VB.net&访问查询

时间:2015-04-06 13:00:45

标签: vb.net

我目前正在为大学做一个vb.net项目,并希望使用文本框,屏蔽文本框和使用vb gui的richtextbox创建一个新的访问记录。但是我一直得到这个例外:

  

“System.Data.dll中发生了'System.Data.OleDb.OleDbException'类型的未处理异常   附加信息:INSERT INTO语句中的语法错误。“

这是我的代码,正在处理其他表格

Private Sub btnSaveNew_Click(sender As Object, e As EventArgs) Handles btnSaveNew.Click
    Dim objrow As DataRow

    objrow = objDataSet.Tables("tblEngineersReport").NewRow

    objrow.Item("To") = txtTo.Text
    objrow.Item("Date_Carried_Out") = txtCompletedDate.Text
    objrow.Item("Description_Of_Work") = txtWorkDescription.Text
    objrow.Item("Comment") = txtComment.Text
    objrow.Item("Quantity1") = txtQuantity1.Text
    objrow.Item("Quantity2") = txtQuantity2.Text
    objrow.Item("Quantity3") = txtQuantity3.Text
    objrow.Item("Quantity4") = txtQuantity4.Text
    objrow.Item("Item_Description1") = txtDescription.Text
    objrow.Item("Item_Description2") = txtDescription2.Text
    objrow.Item("Item_Description3") = txtDescription3.Text
    objrow.Item("Item_Description4") = txtDescription4.Text
    objrow.Item("Unit_Price1") = txtUnitPrice1.Text
    objrow.Item("Unit_Price2") = txtUnitPrice2.Text
    objrow.Item("Unit_Price3") = txtUnitPrice3.Text
    objrow.Item("Unit_Price4") = txtUnitPrice4.Text
    objrow.Item("Rate1") = txtRate1.Text
    objrow.Item("Rate2") = txtRate2.Text
    objrow.Item("Rate3") = txtRate3.Text
    objrow.Item("Labour1") = txtDescription5.Text
    objrow.Item("Labour2") = txtDescription6.Text
    objrow.Item("Labour3") = txtDescription7.Text
    objrow.Item("Hours_Worked1") = txtHours1.Text
    objrow.Item("Hours_Worked2") = txtHours2.Text
    objrow.Item("Hours_Worked3") = txtHours3.Text

    objDataSet.Tables("tblEngineersReport").Rows.Add(objrow)
    objEngineerDA.Update(objDataSet, "tblEngineersReport")

    Retrieve()

    MessageBox.Show("new record added")
    cboJobID.Enabled = True

End Sub

Quanity文本框直到工作小时数都包含在表格布局面板中,我只是想知道这与记录没有保存有什么关系吗?

2 个答案:

答案 0 :(得分:1)

查看列的名称,我注意到您有一个名为 TO 的列。这是MS-Access中的保留关键字,因此如果您没有告诉OleDbCommandBuilder使用适当的QuotePrefix和QuoteSuffix封装列名,则适配器的自动生成查询将出现语法错误字符串。

您需要在OleDbCommandBuilder的声明和初始化之后添加此代码 -

 Dim builder = new OleDbCommandBuilder(objEngineerDA)
 builder.QuotePrefix = "["
 builder.QuoteSuffix = "]"

答案 1 :(得分:0)

您需要检查DataAdapter(objEngineerDA)定义中使用的INSERT语句。根据错误,INSERT的语法显然是不正确的。如果没有看到目前的情况,我无法告知它有什么问题。