элементы списка для доступа к ms, первый элемент повторяется vb.net - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить элементы из списка (всего 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

создает 19 записей в таблице Access, но каждая запись заполняется первым элементом из списка.

Окно сообщений показывает, что код проходит через список, так почему это не отражено в таблице доступа?

1 Ответ

1 голос
/ 08 мая 2020

Это происходит потому, что вы постоянно добавляете новый параметр в коллекцию на каждом l oop. Метод не заменяет предыдущий параметр тем же ParameterName. Итак, запросом используется только первый.
Вам нужно очистить параметры внутри l oop

    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

, но более правильный способ выполнить эту задачу - определить параметр вне l oop и измените только значение параметра внутри l oop. Предполагая, что параметр относится к столбцу строкового типа, вы можете написать

    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

...