Как сделать массовую вставку в базу данных sqlite windows forms из listview
всем привет
Прежде всего "Пожалуйста не судите меня я новичок в программировании"
Я перепробовал множество кодов для вставки мультирегистраторов "Массовая Вставка В SQLite- и я всегда получаю исключения.
я использовал
1. SQLite.NET.dll
using Finisar.SQLite;
2. SQLite3.dll
у меня есть 3 кода 2 из них дали мне исключения а другой работает но это не лучший из них
я предпочитаю первый и второй вариант, потому что думаю, что смогу откатиться назад, если возникнет ошибка
последний код я пишу сам муравей первый и второй я получил его из интернета но я не могу заставить его работать хорошо
&ГТ;&ГТ;&ГТ;&ГТ;&ГТ;&ГТ; "Пример моего интерфейса"
так что пожалуйста если кто нибудь сможет мне помочь я буду благодарен
Что я уже пробовал:
Первый Код :
dbConnection StartConn = new dbConnection(); SQLiteConnection MyConnetion = StartConn.GetConnection(); SQLiteCommand Cm = new SQLiteCommand(); MyConnetion.Open(); using (Cm = new SQLiteCommand()) { using (var transaction = MyConnetion.BeginTransaction()) { for (var i = 0; i < listView.Items.Count; i++) { Cm.CommandText = "insert into InvoiceDetails (Invoice_Id,Item_Id,Item_Description,Item_NeededQuantity,Item_UnitPrice,Item_Discount,Item_Total) " + "values (@Invoice_Id,@Item_Id,@Item_Description,@Item_NeededQuantity,@Item_UnitPrice,@Item_Discount,@Item_Total)"; Cm.Parameters.Add("@Invoice_Id", it.TempInvoice_Id.ToString()); Cm.Parameters.Add("@Item_Id", listView.Items[i].SubItems[0].Text); Cm.Parameters.Add("@Item_Description", listView.Items[i].SubItems[1].Text); Cm.Parameters.Add("@Item_NeededQuantity", listView.Items[i].SubItems[2].Text); Cm.Parameters.Add("@Item_UnitPrice", listView.Items[i].SubItems[3].Text); Cm.Parameters.Add("@Item_Discount", listView.Items[i].SubItems[4].Text); Cm.Parameters.Add("@Item_Total", listView.Items[i].SubItems[5].Text); Cm.ExecuteNonQuery(); } transaction.Commit(); } } MyConnetion.Close();
Второй Код :
dbConnection StartConn = new dbConnection(); SQLiteConnection MyConnetion = StartConn.GetConnection(); using (MyConnetion) { var command = MyConnetion.CreateCommand(); command.CommandText = "insert into InvoiceDetails (Invoice_Id,Item_Id,Item_Description,Item_NeededQuantity,Item_UnitPrice,Item_Discount,Item_Total) " + "values (@Invoice_Id,@Item_Id,@Item_Description,@Item_NeededQuantity,@Item_UnitPrice,@Item_Discount,@Item_Total)"; command.Parameters.Add("@Invoice_Id"); command.Parameters.Add("@Item_Id"); command.Parameters.Add("@Item_Description"); command.Parameters.Add("@Item_NeededQuantity"); command.Parameters.Add("@Item_UnitPrice"); command.Parameters.Add("@Item_Discount"); command.Parameters.Add("@Item_Total"); MyConnetion.Open(); using (var transaction = MyConnetion.BeginTransaction()) { command.Prepare(); for (var i = 0; i < listView.Items.Count; i++) { command.Parameters["@Invoice_Id"].Value = it.TempInvoice_Id.ToString(); command.Parameters["@Item_Id"].Value = listView.Items[i].SubItems[0].Text; command.Parameters["@Item_Description"].Value = listView.Items[i].SubItems[1].Text; command.Parameters["@Item_NeededQuantity"].Value = listView.Items[i].SubItems[2].Text; command.Parameters["@Item_UnitPrice"].Value = listView.Items[i].SubItems[3].Text; command.Parameters["@Item_Discount"].Value = listView.Items[i].SubItems[4].Text; command.Parameters["@Item_Total"].Value = listView.Items[i].SubItems[5].Text; command.ExecuteNonQuery(); } transaction.Commit(); } }
Последний код (на мой взгляд, он не лучший, но он работает):
dbConnection StartConn = new dbConnection(); SQLiteConnection MyConnetion = StartConn.GetConnection(); for (var i = 0; i < listView.Items.Count; i++) { SQLiteCommand Cm = new SQLiteCommand("insert into InvoiceDetails (Invoice_Id,Item_Id,Item_Description,Item_NeededQuantity,Item_UnitPrice,Item_Discount,Item_Total) " + "values (@Invoice_Id,@Item_Id,@Item_Description,@Item_NeededQuantity,@Item_UnitPrice,@Item_Discount,@Item_Total)", MyConnetion); Cm.Parameters.Add("@Invoice_Id", it.TempInvoice_Id.ToString()); Cm.Parameters.Add("@Item_Id", listView.Items[i].SubItems[0].Text); Cm.Parameters.Add("@Item_Description", listView.Items[i].SubItems[1].Text); Cm.Parameters.Add("@Item_NeededQuantity", listView.Items[i].SubItems[2].Text); Cm.Parameters.Add("@Item_UnitPrice", listView.Items[i].SubItems[3].Text); Cm.Parameters.Add("@Item_Discount", listView.Items[i].SubItems[4].Text); Cm.Parameters.Add("@Item_Total", listView.Items[i].SubItems[5].Text); MyConnetion.Open(); Cm.ExecuteNonQuery(); MyConnetion.Close(); }
Gerry Schmitz
Идите с тем, что работает; если только кто-то не заинтересован в "обнаружении различий".
Знаете ли вы, что такое listview "источник данных"? Знаете ли вы, что вы можете использовать это вместо фактического listview?
Eng Mohamed Bassuny
данные listview поступают от пользователя программы это временные данные еще не вставленные в базу данных
вы можете увидеть эту картину https://www9.0zz0.com/2019/05/02/23/563315426.png
это пример моей программы
Gerry Schmitz
Итак, вы говорите, что не знаете, что такое источник данных, пользователь загружает что-то в программу, которую вы не писали, но вы хотите сделать "массовую вставку".
Тогда мое предложение "любить того, кто работает" остается в силе.
Eng Mohamed Bassuny
я не очень хорошо себя чувствую из-за твоих последних слов, но спасибо, что пытаешься мне помочь
Gerry Schmitz
Говорят: "люби того, с кем ты", то есть будь доволен своими благословениями. Я сказал: используйте источник данных, и вы проигнорировали меня. Мое время вышло.
Eng Mohamed Bassuny
Я никогда никого не игнорирую но мне жаль если ты чувствуешь это от меня
и почему я не отвечаю об источнике данных потому что мне не нужен источник данных для listview
причина добавления listview заключается просто в том, чтобы показать пользователю, что он добавит для проверки, есть ли ошибка в некоторых элементах или нет
таким образом listview не нуждается в источнике данных или я не могу понять как я могу использовать его для listview
и я пришел сюда учиться и получить некоторый опыт я не могу получить его из других сетей
не заставляй меня чувствовать себя глупо
и у вас есть все ваше время и извините что беспокою вас :)