插入Access DB(循环)

时间:2011-04-09 03:32:37

标签: asp.net sql

我有这个代码,它出现了一个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

2 个答案:

答案 0 :(得分:0)

我认为你不会因为没有将日期包含在英镑符号内而得到错误。使用变量而非参数时,必须在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

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

答案 1 :(得分:0)

我通过删除单引号将其整理出来。感谢大家为此做出的贡献。