ali.filth Ответов: 1

Как вставить несколько элементов (все элементы) из списка в базу данных (ms. access)


всем привет,

Я новичок в программировании, учусь только по книгам и поискам в интернете.
В настоящее время я создаю простую программу для перечисления имени и пути всех файлов в моей папке.
Я получаю небольшую проблему, которая меня смущает, чтобы найти, где ошибка.
проблема в том, что я получаю ошибку типа "индекс находился за пределами массива." Но когда я вижу, что база данных была успешно заполнена, но только 100 строк / элементов
мой вопрос заключается в том, как вставить несколько элементов(более 1000 элементов) в listbox в базу данных(ms.access)?. спасибо :)
извините за мой плохой английский :)

Что я уже пробовал:

Private Sub itemsimport()
if conn.State = ConnectionState.Closed Then conn.Open()
        Dim sql As String = "INSERT INTO data_lagu(title, singer, kategori, novocal, path_lagu) VALUES (@TITLE, @SINGER, @KATEGORI, @NOVOCAL, @PATH)"
        For Each myitem As String In ListBox2.SelectedItems
            Dim cmd As New OleDbCommand(sql, conn)
            Dim lineArray() As String = myitem.Split("#")
            cmd.Parameters.AddWithValue("@TITLE", lineArray(0))
            cmd.Parameters.AddWithValue("@SINGER", lineArray(1))
            cmd.Parameters.AddWithValue("@KATEGORI", lineArray(2))
            cmd.Parameters.AddWithValue("@NOVOCAL", lineArray(3).Replace(".MPG", ""))
            cmd.Parameters.AddWithValue("@PATH", myitem)
            cmd.ExecuteNonQuery()
        Next
        MsgBox("success")
        conn.Close()
        loaddata()
End Sub

1 Ответов

Рейтинг:
6

CHill60

Это связано с данными. В одной из строк, которые вы разделяете, нет всех 4 элементов. Посмотрите на информацию в вашем списке или посмотрите, где вы заполняете свой список.

Вы действительно можете проверить верхний предел lineArray перед его использованием и просто перейти к следующему элементу в списке. Или подумайте об использовании другого элемента управления для отображения ваших данных, например DataGridView, и не разделяйте / не разделяйте информацию.

Короче говоря, у вас есть некоторые "сломанные" данные

[EDIT]... который вы можете найти вот так

...
Dim lineArray() As String = myitem.Split("#")
If lineArray.GetUpperBound(0) < 3 Then
     MessageBox.Show(String.Format("This is the broken line {0}", myitem))
     Return
End If
cmd.Parameters.AddWithValue("@TITLE", lineArray(0))
---


ali.filth

Извините, просто сосредоточьтесь на 4 значениях выше, игнорируйте 1 строку.
Значение символа " # " состоит в том, чтобы легко разбить слово в списке в соответствии с моим столбцом базы данных (столбец: название, певец, категория, расширение)
Все файлы/элементы в списке имеют одно и то же имя с пробелом примерно так: "all off me#john legend#west#left. mp4"

CHill60

Это не очень хороший способ отображения данных, однако это не имеет значения. Одна из строк в вашем исходном списке не следует этому шаблону. Проверьте верхнюю границу массива lineArray прежде чем пытаться использовать любой из его элементов. Я вставлю пример в свое решение

ali.filth

спасибо @CHill60, с кодом, который вы создали, я понимаю, что не так...вы лучший учитель для меня. салют :: большой палец::