列表框项到ms access的第一项是重复的vb.net
我试图从一个列表框(总共19个)中获取项目,并将其传输到MS Access数据库 下面的代码列表框项到ms access的第一项是重复的vb.net,vb.net,ms-access,listbox,Vb.net,Ms Access,Listbox,我试图从一个列表框(总共19个)中获取项目,并将其传输到MS Access数据库 下面的代码 For i = 0 To Me.lstResourceTypes.Items.Count - 1 command.Parameters.AddWithValue("@ResourceType", lstResourceTypes.Items(i).ToString) MsgBox(lstResourceTypes.Items(i).ToSt
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表中创建19条记录,但每条记录都由列表框中的第一项填充
messagebox确实显示代码在listbox中循环,那么为什么它不在access表中反映这一点呢?之所以会出现这种情况,是因为您在每个循环处不断向集合添加新参数。该方法不会用相同的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。第二种方法有很多缺点,正如这里解释的:@svenliegeois,如果这个答案解决了你的问题,请接受它,这样每个人都知道你不再需要任何帮助。你不应该发表评论说“谢谢”。接受一个答案是所有需要和允许的感谢。