Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
1

SQLite. Сохранение данных

27.11.2023, 23:21. Показов 878. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я создаю приложение на WindowsForms c SQLITE. Проблема заключается в том, что внесенные данные не сохраняются в приложении(в БД они отображаются). В чем проблема? Подскажите, пожалуйста.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    public partial class Form1 : Form
    {
        string path = @"data_table.db";
        string cs = "Data Source=" + Application.StartupPath + "\\data_table.db;Version=3; FailIfMissing=False";
 
        static SQLiteConnection con;
        static SQLiteCommand cmd;
 
        public Form1()
        {
            InitializeComponent();
            con = new SQLiteConnection(cs);
            Create_db();
            data_show();
        }
 
        private void data_show()
        {
            try
            {
                using (var cmd = new SQLiteCommand("SELECT * FROM Students", con))
                using (var dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            if (dr.FieldCount == 8)
                            {
                                dataGridView2.Rows.Add(dr.GetString(0), dr.GetString(1), dr.GetString(2), dr.GetString(3), dr.GetString(4), dr.GetString(5), dr.GetString(6), dr.GetString(7));
                            }
                            else
                            {
                                Console.WriteLine("Incorrect number of fields in query result.");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error opening connection: {ex.Message}");
            }
        }
 
        private void Create_db()
        {
            using (var sqlite = new SQLiteConnection($"Data Source ={path};Version=3; FailIfMissing=False"))
            {
                sqlite.Open();
 
                string checkTableExistQuery = "SELECT name FROM sqlite_master WHERE type='table' AND name='Students';";
                using (var checkCmd = new SQLiteCommand(checkTableExistQuery, sqlite))
                using (var reader = checkCmd.ExecuteReader())
                {
                    if (!reader.HasRows)
                    {
                        string createTableQuery = "CREATE TABLE IF NOT EXISTS Students(surname varchar(50), name nvarchar(50), patronymic nvarchar(50), foe nvarchar(50), physics nvarchar(50), program nvarchar(50), math nvarchar(50));";
 
                        using (var createCmd = new SQLiteCommand(createTableQuery, sqlite))
                        {
                            createCmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            con.Open();
            cmd = new SQLiteCommand(con);
        }
 
        private void insert_btn_Click(object sender, EventArgs e)
        {
            using (var cmd = new SQLiteCommand(con))
            {
                try
                {
                    cmd.CommandText = "INSERT INTO Students(surname, name, patronymic, foe, physics, program, math) VALUES (@surname, @name, @patronymic, @foe, @physics, @program, @math)";
 
                    string Surname = surname_txt.Text;
                    string Name = name_txt.Text;
                    string Patronymic = patronymic_txt.Text;
                    string FOE = foe_txt.Text;
                    string Physics = physics_txt.Text;
                    string Eng = eng_txt.Text;
                    string Program = program_txt.Text;
                    string Math = math_txt.Text;
 
                    cmd.Parameters.AddWithValue("@surname", Surname);
                    cmd.Parameters.AddWithValue("@name", Name);
                    cmd.Parameters.AddWithValue("@patronymic", Patronymic);
                    cmd.Parameters.AddWithValue("@foe", FOE);
                    cmd.Parameters.AddWithValue("@physics", Physics);
                    cmd.Parameters.AddWithValue("@eng", Eng);
                    cmd.Parameters.AddWithValue("@program", Program);
                    cmd.Parameters.AddWithValue("@math", Math);
 
                    InsertData(Surname, Name, Patronymic, FOE, Physics, Eng, Program, Math);
                    data_show();
 
                    dataGridView2.ColumnCount = 8;
                    dataGridView2.Columns[0].Name = "Surname";
                    dataGridView2.Columns[1].Name = "Name";
                    dataGridView2.Columns[2].Name = "Patronymic";
                    dataGridView2.Columns[3].Name = "FOE";
                    dataGridView2.Columns[4].Name = "Physics";
                    dataGridView2.Columns[5].Name = "Eng";
                    dataGridView2.Columns[6].Name = "Program";
                    dataGridView2.Columns[7].Name = "Math";
                    string[] row = new string[] { Surname, Name, Patronymic, FOE, Physics, Eng, Program, Math };
 
                    dataGridView2.Rows.Add(row);
                }
                catch (Exception)
                {
                    Console.WriteLine("Cannot insert data");
                    return;
                }
            }
        }
 
        private void InsertData(string surname, string name, string patronymic, string foe, string physics, string eng, string program, string math)
        {
            using (var con = new SQLiteConnection(cs))
            {
                con.Open();
                using (var cmd = new SQLiteCommand(con))
                {
                    try
                    {
                        cmd.CommandText = "INSERT INTO Students(surname, name, patronymic, foe, physics, eng, program, math) VALUES (@surname, @name, @patronymic, @foe, @physics, @eng, @program, @math)";
                        cmd.Parameters.AddWithValue("@surname", surname);
                        cmd.Parameters.AddWithValue("@name", name);
                        cmd.Parameters.AddWithValue("@patronymic", patronymic);
                        cmd.Parameters.AddWithValue("@foe", foe);
                        cmd.Parameters.AddWithValue("@physics", physics);
                        cmd.Parameters.AddWithValue("@eng", eng);
                        cmd.Parameters.AddWithValue("@program", program);
                        cmd.Parameters.AddWithValue("@math", math);
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error inserting data: {ex.Message}");
                    }
                }
            }
        }
 
        private void update_btn_Click(object sender, EventArgs e)
        {
            using (var cmd = new SQLiteCommand(con))
            {
                try
                {
                    cmd.CommandText = "UPDATE Students Set name=@Name where surname=@Surname";
                    cmd.Prepare();
                    cmd.Parameters.AddWithValue("@Surname", surname_txt.Text);
                    cmd.Parameters.AddWithValue("@Name", name_txt.Text);
 
                    cmd.ExecuteNonQuery();
                    data_show();
                }
                catch (Exception)
                {
                    Console.WriteLine("Cannot update data");
                    return;
                }
            }
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (con != null && con.State != ConnectionState.Closed)
            {
                con.Close();
            }
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2023, 23:21
Ответы с готовыми решениями:

Сохранение изображения в БД SQLite
Народ поскажите как сохранить изображение в БД и главное как эго потом от туда достать. А то уже...

Сохранение массива byte в БД SQlite
Всем привет, через TTS Яндекса прогоняю нужный текст для озвучки. Вот код var values = new...

Сохранение xml файла в БД SQLite
Подскажите, пожалуйста как можно реализовать сохранение xml файла в БД?

сохранение данных из datagridview в бд sqlite
разместил на форме datagridview и к ней присоеденил бд (sqlite). нужно реализовать сохранение...

10
Администратор
Эксперт .NET
17478 / 13710 / 5287
Регистрация: 17.03.2014
Сообщений: 28,148
Записей в блоге: 1
27.11.2023, 23:46 2
keysersoz, такое подозрение что вы работаете с двумя DB файлами. Попробуйте убрать переменную path и всегда пользоваться cs в качестве строки подключения.
0
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
27.11.2023, 23:53  [ТС] 3
Заменил "path" на "cs" и на 48 строке выдает ошибку: "Запись с таким ключом уже существует"
0
Администратор
Эксперт .NET
17478 / 13710 / 5287
Регистрация: 17.03.2014
Сообщений: 28,148
Записей в блоге: 1
28.11.2023, 00:02 4
keysersoz, покажите исправленный код.
0
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
28.11.2023, 08:14  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
public partial class Form1 : Form
    {
        
        string cs = "Data Source=" + Application.StartupPath + "\\data_table.db;Version=3; FailIfMissing=False";
 
        static SQLiteConnection con;
        static SQLiteCommand cmd;
 
        public Form1()
        {
            InitializeComponent();
            con = new SQLiteConnection(cs);
            Create_db();
            data_show();
        }
 
        private void data_show()
        {
            try
            {
                using (var cmd = new SQLiteCommand("SELECT * FROM Students", con))
                using (var dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            if (dr.FieldCount == 8)
                            {
                                dataGridView2.Rows.Add(dr.GetString(0), dr.GetString(1), dr.GetString(2), dr.GetString(3), dr.GetString(4), dr.GetString(5), dr.GetString(6), dr.GetString(7));
                            }
                            else
                            {
                                Console.WriteLine("Incorrect number of fields in query result.");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error opening connection: {ex.Message}");
            }
        }
 
        private void Create_db()
        {
            using (var sqlite = new SQLiteConnection($"Data Source ={cs};Version=3; FailIfMissing=False"))
            {
                sqlite.Open();
 
                string checkTableExistQuery = "SELECT name FROM sqlite_master WHERE type='table' AND name='Students';";
                using (var checkCmd = new SQLiteCommand(checkTableExistQuery, sqlite))
                using (var reader = checkCmd.ExecuteReader())
                {
                    if (!reader.HasRows)
                    {
                        string createTableQuery = "CREATE TABLE IF NOT EXISTS Students(surname varchar(50), name nvarchar(50), patronymic nvarchar(50), foe nvarchar(50), physics nvarchar(50), program nvarchar(50), math nvarchar(50));";
 
                        using (var createCmd = new SQLiteCommand(createTableQuery, sqlite))
                        {
                            createCmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            con.Open();
            cmd = new SQLiteCommand(con);
        }
 
        private void insert_btn_Click(object sender, EventArgs e)
        {
            using (var cmd = new SQLiteCommand(con))
            {
                try
                {
                    cmd.CommandText = "INSERT INTO Students(surname, name, patronymic, foe, physics, program, math) VALUES (@surname, @name, @patronymic, @foe, @physics, @program, @math)";
 
                    string Surname = surname_txt.Text;
                    string Name = name_txt.Text;
                    string Patronymic = patronymic_txt.Text;
                    string FOE = foe_txt.Text;
                    string Physics = physics_txt.Text;
                    string Eng = eng_txt.Text;
                    string Program = program_txt.Text;
                    string Math = math_txt.Text;
 
                    cmd.Parameters.AddWithValue("@surname", Surname);
                    cmd.Parameters.AddWithValue("@name", Name);
                    cmd.Parameters.AddWithValue("@patronymic", Patronymic);
                    cmd.Parameters.AddWithValue("@foe", FOE);
                    cmd.Parameters.AddWithValue("@physics", Physics);
                    cmd.Parameters.AddWithValue("@eng", Eng);
                    cmd.Parameters.AddWithValue("@program", Program);
                    cmd.Parameters.AddWithValue("@math", Math);
 
                    InsertData(Surname, Name, Patronymic, FOE, Physics, Eng, Program, Math);
                    data_show();
 
                    dataGridView2.ColumnCount = 8;
                    dataGridView2.Columns[0].Name = "Surname";
                    dataGridView2.Columns[1].Name = "Name";
                    dataGridView2.Columns[2].Name = "Patronymic";
                    dataGridView2.Columns[3].Name = "FOE";
                    dataGridView2.Columns[4].Name = "Physics";
                    dataGridView2.Columns[5].Name = "Eng";
                    dataGridView2.Columns[6].Name = "Program";
                    dataGridView2.Columns[7].Name = "Math";
                    string[] row = new string[] { Surname, Name, Patronymic, FOE, Physics, Eng, Program, Math };
 
                    dataGridView2.Rows.Add(row);
                }
                catch (Exception)
                {
                    Console.WriteLine("Cannot insert data");
                    return;
                }
            }
        }
 
        private void InsertData(string surname, string name, string patronymic, string foe, string physics, string eng, string program, string math)
        {
            using (var con = new SQLiteConnection(cs))
            {
                con.Open();
                using (var cmd = new SQLiteCommand(con))
                {
                    try
                    {
                        cmd.CommandText = "INSERT INTO Students(surname, name, patronymic, foe, physics, eng, program, math) VALUES (@surname, @name, @patronymic, @foe, @physics, @eng, @program, @math)";
                        cmd.Parameters.AddWithValue("@surname", surname);
                        cmd.Parameters.AddWithValue("@name", name);
                        cmd.Parameters.AddWithValue("@patronymic", patronymic);
                        cmd.Parameters.AddWithValue("@foe", foe);
                        cmd.Parameters.AddWithValue("@physics", physics);
                        cmd.Parameters.AddWithValue("@eng", eng);
                        cmd.Parameters.AddWithValue("@program", program);
                        cmd.Parameters.AddWithValue("@math", math);
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error inserting data: {ex.Message}");
                    }
                }
            }
        }
 
        private void update_btn_Click(object sender, EventArgs e)
        {
            using (var cmd = new SQLiteCommand(con))
            {
                try
                {
                    cmd.CommandText = "UPDATE Students Set name=@Name where surname=@Surname";
                    cmd.Prepare();
                    cmd.Parameters.AddWithValue("@Surname", surname_txt.Text);
                    cmd.Parameters.AddWithValue("@Name", name_txt.Text);
 
                    cmd.ExecuteNonQuery();
                    data_show();
                }
                catch (Exception)
                {
                    Console.WriteLine("Cannot update data");
                    return;
                }
            }
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (con != null && con.State != ConnectionState.Closed)
            {
                con.Close();
            }
        }
    }
}
0
Администратор
Эксперт .NET
17478 / 13710 / 5287
Регистрация: 17.03.2014
Сообщений: 28,148
Записей в блоге: 1
28.11.2023, 11:00 6
Лучший ответ Сообщение было отмечено keysersoz как решение

Решение

Цитата Сообщение от keysersoz Посмотреть сообщение
C#
1
2
string cs = "Data Source=" + Application.StartupPath + "\\data_table.db;Version=3; FailIfMissing=False";
using (var sqlite = new SQLiteConnection($"Data Source ={cs};Version=3; FailIfMissing=False"))
Подставлять строку подключения внутрь строки подключения это "интересная" идея. Попробуйте подумать что нужно исправить прежде чем смотреть подсказку.
подсказка
Строку №48 нужно заменить на
C#
1
            using (var sqlite = new SQLiteConnection(cs))
1
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
29.11.2023, 12:17  [ТС] 7
К сожалению, всё равно при повторной компиляции таблица пустая
0
2643 / 1902 / 356
Регистрация: 14.08.2018
Сообщений: 6,133
Записей в блоге: 4
29.11.2023, 12:35 8
Цитата Сообщение от keysersoz Посмотреть сообщение
всё равно при повторной компиляции таблица пустая
В обозревателе решений выделите файл с БД. В свойствах на копирование файла поставьте Copy if Newer. Тогда файл будет заменятся новым, если вносились изменения в структуру БД.
SQLite. Сохранение данных
0
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
29.11.2023, 13:18  [ТС] 9
А у меня его и нет в обозревателе решений. Как его добавить?

Добавлено через 9 минут
Добавил, но у меня нет "Advanced" настроек.
0
2643 / 1902 / 356
Регистрация: 14.08.2018
Сообщений: 6,133
Записей в блоге: 4
29.11.2023, 14:04 10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Подставлять строку подключения внутрь строки подключения это "интересная" идея.
Иногда она спасает
JSON
1
"ExcelXLSXConnect": "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=Yes;'"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected static string GetExcelConnectionString(string pathToFile, IConfiguration configuration)
{
    string extension = Path.GetExtension(pathToFile);
    string excelConString = string.Empty;
 
    switch (extension)
    {
        case ".xls":
            excelConString = configuration.GetConnectionString("ExcelXLSConnect");
            break;
        case ".xlsx":
            excelConString = configuration.GetConnectionString("ExcelXLSXConnect");
            break;
    }
 
    return string.Format(excelConString, pathToFile);
}
Добавлено через 1 минуту
Цитата Сообщение от keysersoz Посмотреть сообщение
А у меня его и нет в обозревателе решений. Как его добавить?
Ну значит дело не в этом было. Просто это самая распространённая проблема при использовании локальных БД. Она заменяется на пустую при сборке решения.
0
0 / 0 / 0
Регистрация: 26.02.2023
Сообщений: 9
29.11.2023, 14:16  [ТС] 11
Я ещё метод data_show добавил в Form1_Load
Вроде бы до этого писал, таблица выводилась пустая.
0
29.11.2023, 14:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2023, 14:16
Помогаю со студенческими работами здесь

Сохранение настроек в SQLite
В процессе моего обучения разработке для Andrid поднялась тема сохранения параметров приложения. В...

Сохранение БД SQLite в Excel
Подскажите пжлст, как можно сохранить БД SQLite в Excel в Юникоде? Что я делаю : сохраняю БД в...

SQLite регистрация и сохранение денег
Здравствуйте. В проекте есть переменные денег, id. Я хочу чтобы они сохранялись в базе данных...

Сохранение таблицы sqlite в .pdf
Буду очень сильно признателен, если объясните, как можно это сделать :d

Сохранение pdf в sqlite и чтение из базы
Как сохранить файл pdf в базу данных sqlite а после и чтение из нее по кнопке! Подскажите пож)

Android: Сохранение и загрузка изображения в/из SQLite
Доброго времени суток. Необходимо записать в базу только что нарисованное изображение на canvas. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru