列表框项目到 ms 访问第一个项目重复 vb.net

listbox items to ms access first item is repeated vb.net

我正在尝试将列表框中的项目(总共 19 个)传输到 MS Access 数据库

以下代码

        For i = 0 To Me.lstResourceTypes.Items.Count - 1
            command.Parameters.AddWithValue("@ResourceType", lstResourceTypes.Items(i).ToString)
            MsgBox(lstResourceTypes.Items(i).ToString)
            command.ExecuteNonQuery()
        Next

在 Access table 中创建 19 条记录,但每条记录都填充了列表框中的第一项。

消息框确实显示代码循环遍历列表框,那么为什么它没有在访问中反映这一点table?

发生这种情况是因为您在每个循环中不断向集合中添加新参数。该方法不会用相同的 ParameterName 替换先前的参数。因此,查询仅使用第一个。
需要清除循环内的参数

    For i = 0 To Me.lstResourceTypes.Items.Count - 1
        command.Parameters.AddWithValue("@ResourceType", lstResourceTypes.Items(i).ToString)
        MsgBox(lstResourceTypes.Items(i).ToString)
        command.ExecuteNonQuery()
        command.Parameters.Clear()
    Next

但更正确的做法是在循环外定义参数,在循环内只改变参数值。 所以假设参数指的是一个字符串类型的列,你可以写

    command.Parameters.Add("@ResourceType", OleDbType.VarWChar)
    For i = 0 To Me.lstResourceTypes.Items.Count - 1
        command.Parameters("@ResourceType").Value = lstResourceTypes.Items(i).ToString
        command.ExecuteNonQuery()
    Next

请注意,我使用的是 Add 而不是 AddWithValue。第二个有很多缺点,如下所述:AddWithValue is Evil