Вы должны войти, чтобы создавать сообщения и темы.

Работа с SQLite в цикле (ИЗ listbox В SQLite)

Добрый день.

Пытаюсь победить такую задачу.
Создаю табличку в SQLite, и хочу загонять в нее то, что находится listbox (всего один столбец).

Спойлер

private void Button1_Click(object sender, EventArgs e)
        {
                listBox1.Items.Clear(); --чистим лист
                listBox1.Items.AddRange(textBox1.Lines); --перегоняем то что написали в текст в лист (как сделать это проще не придумал)
                for (int i = 0; i < listBox1.SelectedItems.Count; i++)
                {
                    wsConnection.Open(); -- открываем соединение в цикле (как по мне то логично делать это именно внутри цикла)
                    SQLiteCommand command_ins = wsConnection.CreateCommand();
                    command_ins.CommandText = "INSERT INTO JCP (us_name, j_key, pc_name, pc_about, j_date) VALUES(@us_name, @j_key, @pc_name, @pc_about, @j_date)";
                    command_ins.Parameters.Add("@us_name", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@j_key", System.Data.DbType.String).Value = listBox1.SelectedItems[i]; -- тут вроде всё в порядке (ВРОДЕ БЫ, но это не точно, иначе не спрашивал бы)
                    command_ins.Parameters.Add("@pc_name", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@pc_about", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@j_date", System.Data.DbType.String).Value = DateTime.Now;
                    command_ins.ExecuteNonQuery();
                    wsConnection.Close(); -- закрываем тоже в цикле (нет???)
                }
        }

Код отрабатывает, при чем без ошибок... но результата нет. Я могу вставить одну запись, но как только помещаю SQLiteCommand  в цикл то записи просто не вставляются... Почему так?(( И что я делаю не так??(

Заранее благодарен.

for (int i = 0; i < listBox1.SelectedItems.Count; i++)

Привет, не пойму, а кто их выделяет? Вроде как ни одного и не выделено.

Лайкнул Сергей Н.
Сергей Н.
Цитата: KiloSub от 12.10.2020, 08:36
for (int i = 0; i < listBox1.SelectedItems.Count; i++)

Привет, не пойму, а кто их выделяет? Вроде как ни одного и не выделено.

Да, что-то я видимо навертел не того)
Решение найдено (оставлю его тут, вдруг кому-то пригодится):

Спойлер

-- открывать коннект необязательно в цикле, можно делать это и за циклом или при загрузке формы, как это сделал я.
-- далее:
private void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                listBox1.Items.Clear(); -- чистим лист, чтобы избежать ненужной информации
                listBox1.Items.AddRange(textBox1.Lines); -- загоняем из текст в лист
                for (int i = 0; i < listBox1.Items.Count; i++) -- запускаем цикл перебирая строки (значения) из листа
                {
                    SQLiteCommand command_ins = wsloadkey.CreateCommand();
                    command_ins.CommandText = "INSERT INTO JCP (us_name, j_key, pc_name, pc_about, j_date) VALUES(@us_name, @j_key, @pc_name, @pc_about, @j_date)";
                    command_ins.Parameters.Add("@us_name", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@j_key", System.Data.DbType.String).Value = listBox1.Items[i]; -- может быть это делается как-то иначе, но у меня работает так, думаю этого будет достаточно
                    command_ins.Parameters.Add("@pc_name", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@pc_about", System.Data.DbType.String).Value = "0";
                    command_ins.Parameters.Add("@j_date", System.Data.DbType.String).Value = DateTime.Now;
                    command_ins.ExecuteNonQuery();
                    -- коннект в цикле закрывать нельзя, иначе вставится только первая строка, НО, если хотим дергать коннект постоянно, тогда надо открывать коннект в цикле и закрывать его так же в цикле иначе будет ругать и можно поломать БД
                }
                //wsloadkey.Close(); -- коннект закрываю тут, если не требуется дальнейшая работа, если дальше планируется работа на форме с БД, то коннект лучше вообще не дергать в самом цикле и функции в целом
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }