0

我的问题发生在 da.Update(dt)。我收到“OleDbException 未处理,INSERT INTO 语句中的语法错误”错误。当我使用没有字段名称且只有 10 列的基本表时,它起作用了,但现在我有 25 个项目,它不起作用。

Dim dt As New DataTable
    Dim ds As New DataSet

    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\TPComplete.accdb;Persist Security Info=False;"

    con.Open()
    MsgBox("here")
    ds.Tables.Add(dt)

    Dim da As New OleDbDataAdapter

    da = New OleDbDataAdapter("SELECT * FROM DReview", con)

    da.Fill(dt)



    Dim newRow As DataRow = dt.NewRow

    newRow.Item("Caller") = Caller
    newRow.Item("Associate Name") = Associate
    newRow.Item("Store Number") = "1"
    newRow.Item("Number of Rings") = Ring
    newRow.Item("Time on Hold") = HoldTime
    newRow.Item("Greeting: 3 or fewer rings") = GreetingRings
    newRow.Item("Greeting: Asked for your name") = GreetingAskName
    newRow.Item("Greeting: Offered his/her name") = GreetingOfferedName
    newRow.Item("Greeting: Mentioned TIRE PROS in the greeting") = GreetingTirePros
    newRow.Item("Greeting: Associated acted like they are glad") = GreetingGlad
    newRow.Item("Hold for longer than 1 minute") = holdUpdate
    newRow.Item("Ask for the type of car AND look up the size") = LookupSize
    newRow.Item("Ask appropriate questions about the type of driving") = DailyDriving
    newRow.Item("1st Price Mentioned") = SingleTirePrice
    newRow.Item("1st OTD Price Mentioned") = SingleTireOutDoorPrice
    newRow.Item("Tire Brand") = TireBrand
    newRow.Item("Tire Model") = TireModel
    newRow.Item("Offered several tire choices and prices") = SeveralChoices
    newRow.Item("Did they offer financing options") = Financing
    newRow.Item("Mentioned benefits of the location") = Benefits
    newRow.Item("Appointment") = Appointment
    newRow.Item("How long does it take to put them on") = InstallTime
    newRow.Item("Associate Score") = AssociateScore
    newRow.Item("Time Completed") = hms
    newRow.Item("Completed Date") = ymd



    dt.Rows.Add(newRow)
    Dim cb As New OleDbCommandBuilder(da)
    cb.GetInsertCommand()
    da.Update(dt)
    MsgBox("Saved")
    con.Close()
4

1 回答 1

0

错误“INSERT INTO 语句中的语法错误”可能意味着问题在于 OleDb 命令生成器无法正确处理您正在使用的列名。这些行:

    newRow.Item("Store Number") = "1"
    newRow.Item("Number of Rings") = Ring
    newRow.Item("Time on Hold") = HoldTime
    newRow.Item("Greeting: 3 or fewer rings") = GreetingRings
    newRow.Item("Greeting: Asked for your name") = GreetingAskName
    newRow.Item("Greeting: Offered his/her name") = GreetingOfferedName
    newRow.Item("Greeting: Mentioned TIRE PROS in the greeting") = GreetingTirePros
    newRow.Item("Greeting: Associated acted like they are glad") = GreetingGlad

表明你有“非变量类型”的列名,这基本上是你不能用作变量名的任何类型的名称。那只是 { AZ, 0-9 和 "_" }。包含空格之类的非变量类型名称不是无效的,但必须特别引用它们,如下所示:

    newRow.Item("[Store Number]") = "1"

不幸的是,一些连接提供程序(在这种情况下我认为 OleDb 就是其中之一)无法处理它并且会为您取消引用它们,从而导致生成的 SQL 命令无效。

最简单的解决方案是返回列号而不是名称(可能是他们最初拥有的原因)。或者,您可以重命名所有列名以删除所有非可变类型字符(空格、冒号等)。

于 2012-08-01T16:31:59.970 回答