列表框项目到 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
我正在尝试将列表框中的项目(总共 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