Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/47: Рейтинг темы: голосов - 47, средняя оценка - 4.79
 Аватар для mattmaster
1 / 1 / 1
Регистрация: 16.05.2016
Сообщений: 15

Как удалить и изменить данные в базе sqlite через DataGridView (Windows Forms)?

09.06.2016, 03:07. Показов 10442. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема в следующем: пишу на visual studio 2015, создаю базу sqlite через "Server Explorer -- Data connections -- Add connection" по созданному коннекшену правой и добавить таблицу. Заполняю поля. таблица создается без проблем.
Далее на форму вытаскиваю из data source созданную таблицу. Она отображается сразу как подконнекченый DataGridView. На кнопку добавить кидаю такой код (много связанных текстбоксов):
C#
1
2
3
4
5
6
        private void button1_Click(object sender, EventArgs e)
        {
            dbgostsTableAdapter.Insert(int.Parse(iDTextBox.Text), nameTextBox.Text, double.Parse(sizeTextBox.Text), double.Parse(otstupTextBox.Text), double.Parse(intervalTextBox.Text), double.Parse(o_leftTextBox.Text), double.Parse(o_rightTextBox.Text), double.Parse(o_topTextBox.Text), double.Parse(o_bottomTextBox.Text), f_nameTextBox.Text);
            dbgostsTableAdapter.Update(gOSTSDataSet);
            this.dbgostsTableAdapter.Fill(this.gOSTSDataSet.dbgosts);
        }
а вот с удалением и добавлением никик не удается победить. на удаление пишет
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll

Additional information: Для элемента Update требуется действительный DeleteCommand при передаче коллекции DataRow с удаленными строками.
может кто сможет помочь? Если плохо описал прикрепляю исходник. Помогите пожалуйста

Исходник: CheckDOC.rar
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2016, 03:07
Ответы с готовыми решениями:

Как изменить данные Access через dataGridView?
Есть ли шаблон внесения изменений в таблицу access через dataGridView? Не нашел.

Как отобразить данные из SQLite в DataGridView?
Как отобразить данные с БД SQLite в DataGridView, подскажите, пожалуйста... Добавлено через 2 часа 54 минуты Спасибо за неответ)...

Как изменить рамку в Windows Forms?
Хотя бы поменять цвет. Вижу что ниже есть аналогичная тема, но там ответа нет.

28
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.06.2016, 06:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mattmaster Посмотреть сообщение
почему-то при нажатии на кнопку "удалить" удаляет 2 строки
Должна удалиться одна.
Обратите внимание, что я обработчики событий пишу явно. У вас случаем нет в коде дизайнера еще пары обработчиков кнопок? Закомментируйте строки 28, 29 в вышеприведенном коде.
1
 Аватар для mattmaster
1 / 1 / 1
Регистрация: 16.05.2016
Сообщений: 15
12.06.2016, 15:22  [ТС]
insite2012, Спасибо. Все получилось. действительно, закоментив эти строки, перестали команды дублироваться.
Но при окончательном тестировании возникла еще одна досадная неожиданность: при редактировании, заполнив все поля текстбоксов, и нажав кнопку "Изменить", данные вносятся в базу, но все что после запятой отрубается (Например: 1,25 и 1,9 вносятся в базу как 1 и 1 (если писать через точку выбрасывает с ошибкой)). в GostModel.cs, в SQLiteDbHelper.cs и на форме редактирования все необходимые поля поставил в double. Где я мог допустить ошибку?

Вот GostModel.cs :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace CheckDOC.Models {
    public class GostModel {
        public int id { get; set; }
        public string name { get; set; }
        public string f_name { get; set; }
        public double interval { get; set; }
        public double size { get; set; }
        public double otstup { get; set; }
        public double o_left { get; set; }
        public double o_right { get; set; }
        public double o_top { get; set; }
        public double o_bottom { get; set; }
    }
}
Вот SQLiteDbHelper :
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SQLite;
 
using CheckDOC.Models;
 
namespace CheckDOC.Common {
    public class SQLiteDbHelper {
        static string CONNECT_STR = string.Empty;
        static Dictionary<OperationType, string> operations =
            new Dictionary<OperationType, string>();
        static void FillDictionary()
        {
            operations.Add(OperationType.DELETE, "DELETE FROM Gosts WHERE id='{0}'");
            operations.Add(OperationType.INSERT, "INSERT INTO Gosts VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}'");
            operations.Add(OperationType.UPDATE, "UPDATE Gosts SET name='{1}',f_name='{2}',interval='{3}',size='{4}',otstup='{5}',o_left='{6}',o_right='{7}',o_top='{8}',o_bottom='{9}' WHERE id='{0}'");
        }
        static SQLiteDbHelper()
        {
            CONNECT_STR = string.Format("Data Source={0}",
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GOSTS.db"));
            FillDictionary();
        }
 
        private static SQLiteDbHelper _provider = null;
 
        public static SQLiteDbHelper Provider
        {
            get
            {
                if (_provider == null)
                {
                    _provider = new SQLiteDbHelper();
                }
                return _provider;
            }
        }
 
        public GostModel[] GetModels()
        {
            List<GostModel> gosts = new List<GostModel>();
            string command = "SELECT * FROM Gosts";
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR))
            {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(command, cnn))
                {
                    using (SQLiteDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            GostModel gost = new GostModel
                            {
                                id =int.Parse(dr["id"].ToString()),
                                name=(string.IsNullOrEmpty(dr["name"].ToString())) ? "NULL" :(string)dr["name"],
                                f_name = (string.IsNullOrEmpty(dr["f_name"].ToString())) ? "NULL" : (string)dr["f_name"],
                                interval = double.Parse(dr["interval"].ToString()),
                                size=double.Parse(dr["size"].ToString()),
                                otstup = double.Parse(dr["otstup"].ToString()),
                                o_left = double.Parse(dr["o_left"].ToString()),
                                o_right = double.Parse(dr["o_right"].ToString()),
                                o_top = double.Parse(dr["o_top"].ToString()),
                                o_bottom = double.Parse(dr["o_bottom"].ToString())
                            };
                            gosts.Add(gost);
                        }
                    }
                }
            }
            return gosts.ToArray();
        }
 
  /*      public void OperateModel(GostModel model, OperationType operation)
        {
            string command = string.Format(operations[operation], model.id, model.name, model.f_name, model.interval, model.size, model.otstup,
                model.o_left, model.o_right, model.o_top, model.o_bottom);
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR))
            {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(command, cnn))
                {
                    cmd.ExecuteNonQuery();
                }
            }
        }*/
 
        public void OperateModel(GostModel model, OperationType operation)
        {
            string command = string.Format(operations[operation], model.id, model.name, model.f_name, model.interval, model.size, model.otstup,
                model.o_left, model.o_right, model.o_top, model.o_bottom);
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR))
            {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(command, cnn))
                {
                    cmd.ExecuteNonQuery();
                }
            }
        }
 
 
        public GostModel GetModelById(int id)
        {
            string command = string.Format("SELECT * FROM Gosts WHERE id='{0}'", id);
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR))
            {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(command, cnn))
                {
                    using (SQLiteDataReader dr = cmd.ExecuteReader())
                    {
                        if (!dr.HasRows)
                        {
                            throw new Exception("Wrong id!");
                        }
                        dr.Read();
                        GostModel gost = new GostModel
                        {
                            id = int.Parse(dr["id"].ToString()),
                            name = (string.IsNullOrEmpty(dr["name"].ToString())) ? "NULL" : (string)dr["name"],
                            f_name = (string.IsNullOrEmpty(dr["f_name"].ToString())) ? "NULL" : (string)dr["f_name"],
                            interval = double.Parse(dr["interval"].ToString()),
                            size = double.Parse(dr["size"].ToString()),
                            otstup = double.Parse(dr["otstup"].ToString()),
                            o_left = double.Parse(dr["o_left"].ToString()),
                            o_right = double.Parse(dr["o_right"].ToString()),
                            o_top = double.Parse(dr["o_top"].ToString()),
                            o_bottom = double.Parse(dr["o_bottom"].ToString())
                        };
                        return gost;
                    }
                }
            }
        }
    }
 
    public enum OperationType
    {
        INSERT,
        UPDATE,
        DELETE
    }
 
}
А Вот и сама форма GostEdit:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CheckDOC.Models;
using CheckDOC.Common;
 
namespace CheckDOC
{
    public partial class GostEdit : Form
    {
        int _id;
     //   OperationType _operation;
        public GostEdit(int id)
        {
            InitializeComponent();
            btnOk.Click += new EventHandler(btnOk_Click);
            btnCancel.Click += new EventHandler(btnCancel_Click);
 
            _id = id;
 //           _operation = operation;
 
            this.Load += new EventHandler(GostEdit_Load);
        }
 
        void btnOk_Click(object sender, EventArgs e)
        {
            //Тут проверить на корректность все текстовые поля!!!
 
            GostModel model = new GostModel
            {
                id = int.Parse(iDTextBox.Text),
                name = nameTextBox.Text,
                f_name = f_nameTextBox.Text,
                interval = double.Parse(intervalTextBox.Text),
                size = double.Parse(sizeTextBox.Text),
                otstup = double.Parse(otstupTextBox.Text),
                o_left = double.Parse(o_leftTextBox.Text),
                o_right = double.Parse(o_rightTextBox.Text),
                o_top = double.Parse(o_topTextBox.Text),
                o_bottom = double.Parse(o_bottomTextBox.Text)
            };
    //       SQLiteDbHelper dbHelper = new SQLiteDbHelper();
       //     GostModel model = SQLiteDbHelper.Provider.GetModelById(_id);
            SQLiteDbHelper.Provider.OperateModel(model, OperationType.UPDATE);  
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
 
        void GostEdit_Load(object sender, EventArgs e)
        {
 
            if (_id != -1)
            {
                GostModel model = SQLiteDbHelper.Provider.GetModelById(_id);
                FillGost(model);
            }
 
 
        }
        void FillGost(GostModel model)
        {
            iDTextBox.Text = model.id.ToString();
            nameTextBox.Text = model.name;
            f_nameTextBox.Text = model.f_name;
            intervalTextBox.Text = model.interval.ToString();
            sizeTextBox.Text = model.size.ToString();
            otstupTextBox.Text = model.otstup.ToString();
            o_leftTextBox.Text = model.o_left.ToString();
            o_rightTextBox.Text = model.o_right.ToString();
            o_topTextBox.Text = model.o_top.ToString();
            o_bottomTextBox.Text = model.o_bottom.ToString();
        }
        void btnCancel_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.06.2016, 18:52
mattmaster, ну вообще, если по нормальному, то вам нужно использовать в запросах параметры. Я сделал без них только из-за экономии времени)))
Попробуйте переделать запросы под параметры и посмотрите результат.
0
 Аватар для mattmaster
1 / 1 / 1
Регистрация: 16.05.2016
Сообщений: 15
12.06.2016, 21:01  [ТС]
mattmaster, ну вообще, если по нормальному, то вам нужно использовать в запросах параметры. Я сделал без них только из-за экономии времени)))
Попробуйте переделать запросы под параметры и посмотрите результат.
insite2012, Можно попросить подробнее объяснить как переделать запросы под параметры? Или по возможности и при наличии свободной минутки подредактировать мой запрос, который выше в сообщение. а-то я пересмотрел некоторые темы на этом форуме и в интернете, но увы, пока я этого не понял( буду признателен. и Спасибо за помощь.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.06.2016, 21:32
Цитата Сообщение от mattmaster Посмотреть сообщение
как переделать запросы под параметры?
Сегодня уже поздно, завтра переделаю свой пример. Потерпите до завтра?
0
 Аватар для mattmaster
1 / 1 / 1
Регистрация: 16.05.2016
Сообщений: 15
12.06.2016, 21:39  [ТС]
Сегодня уже поздно, завтра переделаю свой пример. Потерпите до завтра?
Завтра самый последний срок сдачи, но естественно потерплю... может есть толковая ссылка, как это сделать "для чайников"?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.06.2016, 12:22
Цитата Сообщение от mattmaster Посмотреть сообщение
Завтра самый последний срок сдачи
Надеюсь успеете. Вот вам пример.
Вложения
Тип файла: rar CheckDOC.rar (593.6 Кб, 24 просмотров)
1
 Аватар для mattmaster
1 / 1 / 1
Регистрация: 16.05.2016
Сообщений: 15
13.06.2016, 20:44  [ТС]
insite2012, СПАСИБО!!! Все работает!!!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.06.2016, 21:03
Цитата Сообщение от mattmaster Посмотреть сообщение
СПАСИБО!!!
На здоровье.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2016, 21:03

Веб. Как изменить данные в базе по изменению данных инпута? Получить измененные данные инпута?
Доброго времени суток! Ситуация такая.. есть форма с таблицей, содержание таблицы выводится из базы. В таблице есть инпут ( &lt;input...

Взаимодействие БД SQLite и приложения на Windows Forms
Доброй ночи вам, обитатели форума. Появилась проблема, склеить БД с SQLite в мою Windows Forms апликацию, Visual Studio '10. Как это...

База данных SQLite в Windows Forms
Здравствуйте, такая проблема: сделал курсовую в которой такая структура: DAL(Посылает запросы до базы данных, то есть работает...

Как сохранить данные в Windows Forms
Привет! Помогите пожалуйста! При запуске программы открывается окно с listbox и кнопкой настроить. При нажатии кнопки настроить...

Данные из Datagridview в Sqlite
Всем привет! Подскажите, пожалуйста, как перенести данные, введённые в Datagridview, в базу данных Sqlite? Как выводить из БД в...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru