我想把列表框中的项目(共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表中创建了19条记录,但每条记录都是由列表框中的第一个项目填入的。
消息框确实显示代码在列表框中循环,为什么在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。第二种方法有很多缺点,这里解释一下。AddWithValue是邪恶的