Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/75: Рейтинг темы: голосов - 75, средняя оценка - 4.56
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
1

Сохранение изменений из datagridview в базе данных

16.05.2012, 21:39. Просмотров 14048. Ответов 10
Метки нет (Все метки)

Привязываю datagridview к таблице в бд вызывая метод Load(); (использую 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
        private static SQLiteConnection sql_con;
        private static SQLiteCommand sql_cmd;
        private static SQLiteDataAdapter DB;
        private static DataSet DS = new DataSet();
        private static DataTable DT = new DataTable();
 
        private void Load()
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = "select ID, koment from Koments";
            ExecuteQuery(CommandText);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            DB.AcceptChangesDuringFill = true;
            DB.AcceptChangesDuringUpdate = true;
            DS.Reset();
            DB.Fill(DS);
            DT = DS.Tables[0];
            dataGridView1.DataSource = DT;
            sql_con.Close();
            }
 
        private void ExecuteQuery(string txtQuery)
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandText = txtQuery;
            sql_cmd.ExecuteNonQuery();
            sql_con.Close();
        }
 
        private void SetConnection()
        {
            sql_con = new SQLiteConnection("Data Source=data.db;Version=3;New=False;Compress=True;");
        }
Добавлено через 5 часов 33 минуты
Так может кто помочь?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 21:39
Ответы с готовыми решениями:

Удаление из dataGridView и сохранение изменений в базе
private void btnDelete_Click(object sender, EventArgs e) { ...

Сохранение изменений в Базе Данных
Всем доброго времени суток! Есть проблема, не могу сохранить изменения в базе данных. На форме есть...

Сохранение изменений DataSet в базе данных
Добрый вечер! Работаю в VS Community 2015. Имеется база данных stock.mdf и в ней таблица...

Сохранение изменений DataGridView в базу данных
Нужна помощь с сохранением изменений из DataGridView в БД MS SQL, пересмотрел много различных тем,...

Формирование запроса к базе данных и сохранение в ней внесенных изменений
База данных Access 2003 Таблиц в базе в принципе, но вроде для запроса нужны 3 Таблица Polzovatel...

10
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
16.05.2012, 22:38 2
у dataadapter'a нужно заполнить InsertCommand, UpdateCommand, ну и DeleteCommand.
А вообще есть хорошая штука CommandBuilder (в sqlite он тоже имеется), который уже знает как обновить таблицы.
Примерно так это будет выглядеть:
C#
1
2
3
4
5
sqliteCommandBuilder cb= new sqliteCommandBuilder(DB);
cb.GetUpdateCommand();
cb.GetInsertCommand();
cb.GetDeleteCommand();
DB.update(DT)
пишу по памяти, могут быть ошибки
1
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
17.05.2012, 12:25  [ТС] 3
Монфрид,
Ну добавленные поля так сохраняются. А вот любые другие изменения- нет.
Одна из ошибок проскакивающих:
Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей.
0
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
17.05.2012, 13:33 4
у тебя строка
C#
1
"select ID, koment from Koments"
выбирает все столбцы или только часть?
просто commandBuilder смотрит на то что записано в selectCommand'e у dataAdapter'a и в зависимости от этого строит сам update,insert, delete.
можешь не делать getUpdatecommand() у commandBuilder'a, а явно прописать команду update y dataadapter'a типа такого:
C#
1
2
3
DB.UpdateCommand=new sqliteCommand("update Koments set koment=? where id=?");
DB.UpdateCommand.Parameters.Add("koment", OleDbType.VarChar, 60, "koment");
DB.UpdateCommand.Parameters.Add("id", OleDbType.Integer, 5, "id");
0
17.05.2012, 13:33
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
17.05.2012, 14:00  [ТС] 5
Вообще у меня выбираются все столбцы в таблице при привязке.
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
18.05.2012, 18:09  [ТС] 6
Вот отрезок с кода, где есть строка выборки с бд и команда update. Можете глянуть, и сказать ,где я ошибся? выбивает ошибку.
C#
1
2
3
4
5
6
7
8
string CommandText = "select ID, nomer, polka, stelaj,koment from Books";
            DB = new SQLiteDataAdapter(CommandText, sql_con);
 
            DB.UpdateCommand = new SQLiteCommand("update Books set nomer=? where id=?");
            DB.UpdateCommand.Parameters.Add("koment",DbType.String , 60, "koment");
            DB.UpdateCommand.Parameters.Add("polka", DbType.Int32, 5, "polka");
            DB.UpdateCommand.Parameters.Add("nomer", DbType.Int32, 5, "nomer");
            DB.UpdateCommand.Parameters.Add("stelaj", DbType.Int32, 5, "stelaj");
Новые записи сохраняются, но при сохранении изменений ошибка:
Нарушение параллелизма: UpdateCommand затронула 0 из ожидаемых 1 записей.
Добавлено через 1 минуту
P.s. Переименовывание заголовков столбцов не повлияет?
0
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
19.05.2012, 07:48 7
что за ошибка?
у тебя 4 параметра заданы, хотя в запросе их 2
и где параметр с id?
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
19.05.2012, 11:06  [ТС] 8
Текст ошибки в цитате.
А можете все таки подсказать, как мне надо исправить этот момент с четырьмя параметрами?
пробовал:
C#
1
DB.UpdateCommand = new SQLiteCommand("update Books set nomer=? where id=? , koment=? , polka=?, stelaj=?");
Получил ошибку, что неправильно составлен запрос, что-то с запятыми связанное...
0
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
19.05.2012, 11:59 9
оператор "where" должен быть последним.
C#
1
DB.UpdateCommand = new SQLiteCommand("update Books set nomer=?, koment=?, polka=?, stelaj=? where id=?");
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
21.05.2012, 18:48  [ТС] 10
Использовал пример с последних нескольких постов. Словил ошибку:
Динамическое создание SQL для нескольких базовых таблиц не поддерживается.
Добавлено через 3 минуты
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Data.OleDb;
 
namespace Kafedra
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private static SQLiteConnection sql_con;
        private static SQLiteCommand sql_cmd;
        private static SQLiteDataAdapter DB;
        private static DataSet DS = new DataSet();
        private static DataTable DT = new DataTable();
        SQLiteCommandBuilder cb ;
 
        private void NewMethod()
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = "select  nomer, polka, stelaj, koment from Books";
            ExecuteQuery(CommandText);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
 
 
            DB.UpdateCommand = new SQLiteCommand("update Books set nomer=?, koment=?, polka=?, stelaj=? where id=?");
            DB.UpdateCommand.Parameters.Add("nomer", DbType.Int32, 5, "nomer");
            DB.UpdateCommand.Parameters.Add("polka", DbType.Int32, 5, "polka");
            DB.UpdateCommand.Parameters.Add("stelaj", DbType.Int32, 5, "stelaj");
            DB.UpdateCommand.Parameters.Add("koment", DbType.String, 60, "koment");
            DB.UpdateCommand.Parameters.Add("id", DbType.Int32, 5, "id");
 
                        
            DB.AcceptChangesDuringFill = true;
            DB.AcceptChangesDuringUpdate = true;
            DS.Reset();
            DB.Fill(DS);
            DT = DS.Tables[0];
            dataGridView1.DataSource = DT;
            sql_con.Close();
            cb = new SQLiteCommandBuilder(DB);
            dataGridView1.Columns[0].HeaderText = "№ папки";
            dataGridView1.Columns[1].HeaderText = "№ полки";
            dataGridView1.Columns[2].HeaderText = "№ стелажа";
            dataGridView1.Columns[3].HeaderText = "Комментарий";
 
        }
 
        private void ExecuteQuery(string txtQuery)
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandText = txtQuery;
            sql_cmd.ExecuteNonQuery();
            sql_con.Close();
        }
 
        private void SetConnection()
        {
            sql_con = new SQLiteConnection("Data Source=data.db;Version=3;New=False;Compress=True;");
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            NewMethod();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            DB.Update(DS);
        }
    }
}
Вот полный код. Не могу понять, где таки ошибка... Не работает двусторонняя привязка.
P.s. бд и таблицу создавал таким запросом:
C#
1
string query1 = ("CREATE TABLE Books (Id integer PRIMARY KEY AUTOINCREMENT NOT NULL, nomer int NOT NULL, polka int NOT NULL, stelaj int NOT NULL, koment char(200) NOT NULL)");
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
23.05.2012, 16:33  [ТС] 11
Так может кто помочь?

Добавлено через 5 часов 33 минуты
Все, методом научного тыка решил задачу) Проблема была в том- в самом начале. когда только создавал привязку, не выбрал такой параметр как id для отображения.
0
23.05.2012, 16:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 16:33

DataGridView: сохранение в базе данных Access
Здравствуйте. Есть БД с 2мя таблицами на Access. Подключил к DataGridView. Как теперь через DGV...

Сохранение изменений в dataGridView
db = new DataClasses1DataContext(); dataGridViewClientSet.DataSource = db.Clients; private void...

Сохранение изменений в DataGridView
здравствуйте! у меня проблема с DataGridView я немогу сохорнить то што я редактировал в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru