Emejulu JVT Ответов: 1

База данных Sqlite не сохраняет вставленные данные


У меня возникли проблемы с сегментом кода, где я хочу обновить базу данных приложения SQLite некоторыми записями из удаленной базы данных MySQL. Код выполняется без ошибок, но все равно не отражается в базе данных. Пожалуйста, мне нужна помощь, чтобы понять, что я упускаю.
Ниже приведен фрагмент кода :

#region Offline Upload

            if (items_going_offline > 0)
            {
                update_progress.SafeInvoke(d => d.Visible = true);

                DialogResult result = MessageBox.Show("Host " + items_going_offline + " document(s) to OFFLINE", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    #region Incoming
                    if (MySqlincoming_refNos.Count > 0)
                    {
                        foreach (string re in MySqlincoming_refNos)
                        {
                            path_offline.Clear();
                            path_online.Clear();

                            select_query_online = "select * from " + store.database() + "incoming where ref_no = @ref";

                            MySql_cmd = new MySqlCommand(select_query_online, online_con1);

                            MySql_cmd.Parameters.AddWithValue("@ref", (string)re);

                            Retry.retry.Do(() => store.openConnection("mysql", online_con1, con1), TimeSpan.FromSeconds(10), 5);

                            DataSet dsI = new DataSet();
                            MySqlDataAdapter daI = new MySqlDataAdapter(MySql_cmd);
                            daI.Fill(dsI);

                            if (dsI.Tables[0].Rows.Count > 0)
                            {
                                refNo = (string)dsI.Tables[0].Rows[0][1];
                                subject = (string)dsI.Tables[0].Rows[0][2];
                                date = (DateTime)dsI.Tables[0].Rows[0][3];
                                senders = (string)dsI.Tables[0].Rows[0][4]; ;
                                receiver = (string)dsI.Tables[0].Rows[0][5];

                                try
                                {
                                    for (int a = 1; a < 21; a++)
                                    {
                                        if (dsI.Tables[0].Rows[0][5 + a] != DBNull.Value)
                                        {
                                            string f = (string)dsI.Tables[0].Rows[0][5 + a];
                                            path_online.Add(f.Remove(0, 39));
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show("Unable to read data\n" + ex.Message);
                                }

                                
                                List<byte[]> downloadedFiles = new List<byte[]>();
                                //download the files
                                store.downloadFile(store.FTP(), path_online, ref downloadedFiles);

                                Retry.retry.Do(() => store.openConnection("sqlite", online_con1, con1), TimeSpan.FromSeconds(10), 5);

                                using (SQLiteTransaction Sqlite_transaction = con1.BeginTransaction())
                                {
                                    try
                                    {
                                        insert_query_online = "insert into incoming (ref_no, subject, date, sender, receiver, page_1, page_2, page_3, page_4, page_5, page_6, page_7, page_8, page_9, page_10, page_11, page_12, page_13, page_14, page_15, page_16, page_17, page_18, page_19, page_20) values(@ref_no, @subject, @date, @sender, @receiver, @page_1, @page_2, @page_3, @page_4, @page_5, @page_6, @page_7, @page_8, @page_9, @page_10, @page_11, @page_12, @page_13, @page_14, @page_15, @page_16, @page_17, @page_18, @page_19, @page_20)";

                                        Sqlite_cmd = new SQLiteCommand(insert_query_offline, con1);

                                        Sqlite_cmd.Parameters.AddWithValue("@ref_no", (string)refNo);
                                        Sqlite_cmd.Parameters.AddWithValue("@subject", (string)subject);
                                        Sqlite_cmd.Parameters.AddWithValue("@date", (DateTime)date);
                                        Sqlite_cmd.Parameters.AddWithValue("@sender", (string)senders);
                                        Sqlite_cmd.Parameters.AddWithValue("@receiver", (string)receiver);

                                        //make some pages = null
                                        for (int a = 0; a < 20; a++)
                                        {
                                            if(a < downloadedFiles.Count)
                                                Sqlite_cmd.Parameters.AddWithValue("@page_" + (a + 1) + "", (object)downloadedFiles[a]);
                                            else
                                                Sqlite_cmd.Parameters.AddWithValue("@page_" + (a + 1) + "", null);
                                        }

                                        //Retry.retry.Do(() => Sqlite_cmd.ExecuteNonQuery(), TimeSpan.FromSeconds(10), 5);
                                        Sqlite_cmd.ExecuteNonQuery();
                                        Sqlite_transaction.Commit();

                                        update_progress.SafeInvoke(d => d.Increment(1));

                                        offlineCountdown--;
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show("Unable to UPDATE an Offline incoming item");
                                        Sqlite_transaction.Rollback();
                                    }
                                }
                                store.closeConnection("sqlite", online_con1, con1);
                            } 
                            store.closeConnection("mysql", online_con1, con1);
                        }
                    }
                    #endregion


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

[удалить дубликат кода]

1 Ответов

Рейтинг:
0

David_Wimbley

Вы говорите, что ваш код выполняется без ошибок, но данные не вставляются в базу данных.

Вам нужно освоиться с использованием инструментов отладки в visual studio.

как использовать точки останова в visual studio - Google Search[^]

Использование Точек Останова[^]

Отладка в Visual Studio[^]

Вы предоставили пример кода, который великолепен, но для того, чтобы сделать это работающее приложение, не хватает большого количества кода. Если вы берете данные из mysql и перемещаете их в sql lite, вам следует посмотреть учебники sql lite и mysql в .net

подключение к sql lite c# - поиск в Google[^]

Подключение к mysql c# - поиск в Google[^]

Идея здесь в том, чтобы разбить вашу проблему на более мелкие части. Итак, в этом духе вы должны начать с написания кода для подключения к mysql. Как только соединение заработает, напишите код для выполнения запроса к mysql. Затем убедитесь, что вы получите ожидаемые результаты после выполнения запроса. Если запрос не выполняется ... бум ... вот в чем проблема. Но если запрос будет выполнен, напишите код для подключения к sql lite и проверьте, что он работает. Если этот код не работает, значит, ваша проблема связана с sql lite. Если соединение работает, напишите образец вставки, если вставка работает, вы знаете, что у вас есть правильный код для вставки в sql lite. Продолжайте это делать, и вы доберетесь до того, что исправили свой собственный код, не дожидаясь, пока незнакомцы в Интернете напишут ваше приложение за вас.

Поэтому вместо того, чтобы гадать, что делает ваш код, используйте приведенные выше ссылки и предложения, чтобы пройти через ваш код с точками останова и посмотреть, в какой момент у вашего кода возникают проблемы. У нас нет доступа к вашему компьютеру, жесткому диску, базам данных, и мы не можем читать мысли. Здесь много чего не хватает, кроме кода (пример: Схема/пример данных), чтобы кто-то мог повторить вашу проблему с данным кодом, чтобы иметь возможность помочь вам. Поэтому лучший способ помочь вам-это побудить вас помочь себе с помощью отладчика в visual studio.


Emejulu JVT

Спасибо, я уже довольно давно использую отладчик, но, похоже, мне придется постараться еще больше. Просто для записи, набор данных заполняется должным образом всеми данными, которые мне нужно вставить.