如何在访问数据库中插入多行?

时间:2017-03-20 16:32:27

标签: vb.net ms-access

我正在尝试将多行插入Access数据库。该表名为sales,其列为sandwichprice。我试图插入的数据包含在多个TextBox控件中。

到目前为止,我已尝试过此代码:

Dim sql As String = "INSERT INTO [sales] ([sandwich]) VALUES ([@sandwich])"
Try
    Using conn As New OleDbConnection(constring)
        Using cmd As New OleDbCommand(sql, conn)
            conn.Open()
            For Each Order As TextBox In grpbill.Controls
                If Order.Text.Length > 0 Then
                    cmd.Parameters.AddWithValue("@sandwich", Order.Text)
                    cmd.ExecuteNonQuery()
                End If
            Next Order
        End Using
        conn.Close()
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
End Try

工作正常。程序只检查完整的TextBox控件并插入正确的行数,但是当我检查数据库的值完全相同时,反复插入最后TextBox的值。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您应该在For Each循环外添加参数 并更新每个循环的值。取消.AddWithValue并使用.Add.AddWithValue必须推断查询参数的数据库类型。

您还应该考虑使用grpbill.Controls.OfType(Of TextBox)()代替grpbill.Controls,因为这样可以确保您只浏览TextBox控件集合而不包含Label或{{1} }或GroupBox等。

请注意,我有以下LINQ语句:

Panel

有了这个,您现在可以删除From t In grpbill.OfType(Of TextBox)() Where t.TextLength > 0 Order By t.TabIndex 声明。另外,请务必为每个If设置TabIndex,以便按正确的顺序将它们添加到数据库中。

我还删除了TextBox以缩短代码。您可以使用逗号代替。这只是个人偏好。

最后,您不需要Using,因为conn.Close()将为您处理所有这些。

代码:

Using

答案 1 :(得分:0)

我认为你没有宣布和设定价值。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Name As String = txtName.Text
    Dim Email As String = tbxEmail.Text
    Dim Comment As String = tbxComment.Text

    Using dbConn = New OleDbConnection(".......")
        dbConn.Open()
        Dim strSql = "INSERT INTO [user] (username, email, comments) VALUES (?,?,?)"
        Using objcmd = New OleDbCommand(strSql, dbConn)
            objcmd.Parameters.AddWithValue("@username", Name)
            objcmd.Parameters.AddWithValue("@email", Email)
            objcmd.Parameters.AddWithValue("@comments", Comment)
            objcmd.ExecuteNonQuery()
        End Using
    End Using
    Response.Write("Submitted Successfully")
End Sub

here