【问题标题】:Insert into Access DB (loop)插入 Access DB(循环)
【发布时间】:2011-04-09 03:32:36
【问题描述】:

我有这段代码,它出现了 INSERT INTO 语句错误...

它可能是什么,但我已经有一段时间了......请帮助。

'Add items to db'
Function recordOrder()

    objDT = Session("Cart")

    Dim intCounter As Integer


    For intCounter = 0 To objDT.Rows.Count - 1

        objDR = objDT.Rows(intCounter)

        Dim con2 As New System.Data.OleDb.OleDbConnection

        Dim myPath2 As String
        myPath2 = Server.MapPath("faraxday.mdb")

        con2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=" & myPath2 & ";"
        Dim myCommand2 As New System.Data.OleDb.OleDbCommand

        myCommand2.CommandText = "INSERT INTO order(order_date, coupon_id, customer_id, quantity) values('" & System.DateTime.Now & "','" & Int32.Parse(objDR("ID")) & "','" & Int32.Parse(custID) & "','" & Int32.Parse(objDR("quantity")) &"')"
        myCommand2.Connection = con2
        con2.Open()
        myCommand2.ExecuteReader()
        con2.Close()




        test.Text += "Order ID: " & objDR("ID") & "Order Date: " & System.DateTime.Now & ", Cust ID: " & custID & ", Quantity: " & objDR("quantity") &" "

    Next


End Function

【问题讨论】:

  • INSERT INTO 语句中的语法错误。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Data.OleDb.OleDbException:INSERT INTO 语句中的语法错误
  • 你应该在循环外打开和关闭连接。

标签: asp.net sql


【解决方案1】:

我认为您因未将日期括在英镑符号内而出现错误。使用变量而不是参数时,您必须在 Jet (Access) 中执行此操作。

VALUES('#" & DateTime.Now.Date & "#',...

我还冒昧地为您重构了这段代码,因为您正在为每条记录创建一个新连接,这是个坏消息。使用 Try Catch finally 块并将所有内容移到 For 循环之外(请参见下文)

    Function recordOrder()

    objDT = Session("Cart")
    Dim intCounter As Integer
    Dim con2 As New System.Data.OleDb.OleDbConnection
    Dim myPath2 As String
    myPath2 = Server.MapPath("faraxday.mdb")
    con2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" <-- etc
    Dim myCommand2 As New System.Data.OleDb.OleDbCommand
    myCommand2.Connection = con2
    con2.Open()
    Try
        For intCounter = 0 To obDT.Rows.Count - 1
            objDR = objDT.Rows(intCounter)
            myCommand2.CommandText = "INSERT INTO order(order_date,coupon_id,customer_id,quantity)" _
                & "VALUES ('#" & System.DateTime.Now.Date & "#','" & Int32.Parse(objDR("ID")) & "','" & Int32.Parse(custID) _
                & "','" & Int32.Parse(objDR("quantity")) & "')"
            myCommand2.ExecuteReader()
        Next
    Catch ex As Exception
        'handle errors here
    Finally
        If con2.State = ConnectionState.Open Then
            con2.Close()
        End If
    End Try
End Function

如果有帮助,记得标记为已回答。

【讨论】:

  • 这些值仍未存储在数据库中。我不确定这个问题可能是什么。查询字符串是正确的...
  • 桌子上的主键是什么?如果您在 Catch 块中放置断点,是否会弹出任何异常?它们是什么?
  • 有一个主键,但它是自动递增的,所以我把它留空。它没有显示任何错误,但它没有插入到数据库中。
  • System.Data.OleDb.OleDbException:INSERT INTO 语句中的语法错误。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 在 System.Data。 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehav 处的 OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,Object& executeResult)
  • 假设您对所有内容都有有效值,请将命令从 ExecuteQuery 更改为 ExecuteNonQuery()。如果这不起作用,请尝试将 CommandType 设置为 CommandType.Text。如果所有这些仍然不起作用,请找到一种方法来准确获取插入语句的字符串副本并将其放上去。
【解决方案2】:

我已通过删除单引号对其进行了整理。感谢大家为此做出贡献。

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多