Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45

Сохранение изменений из DataGridView в бд access

25.11.2018, 22:19. Показов 5659. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, уважаемый форум.
Я пишу программу WinForms, работающую с одним файлом accdb, в котором 3 таблицы. Я попал в ступор, когда захотел реализовать сохранение изменений в DataGridView (модификация ячеек) в одну из таблиц моего файла accdb. После долгого расшаривания сайтов понял, что для моего случая оптимальный вариант это OleDbCommandBuilder. Но у меня VS ругается на "Неправильный синтаксис выражения Update". Я почти не разбираюсь в sql запросах, разве что выборку сделать. Поэтому не могу понять что не так с сгенерированным запросом.
Вот весь код (и скриншот где ошибка происходит):
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
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 System.Data.OleDb;
 
namespace SC
{
    public partial class Form_sc : Form
    {
        string conStr = "data source=" + Application.StartupPath + "\\TG.accdb" + ";provider=Microsoft.ACE.OLEDB.12.0;";
        public static OleDbDataAdapter da = null;
        public static DataSet ds = new DataSet();
 
        public Form_sc()
        {
            InitializeComponent();
        }
 
        private void Form_sc_Load(object sender, EventArgs e)
        {
            OleDbConnection dbc = new OleDbConnection(conStr);
            dbc.Open();
            da = new OleDbDataAdapter("SELECT * FROM Schedule", dbc);
            
            //ds.Reset();
            da.Fill(ds);
            
            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.Columns[0].Visible = false;
            //dbc.Close();
 
        }
 
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
                MessageBox.Show("В ячейке недопустимый тип данных!");
        }
 
        private void button4_Click(object sender, EventArgs e) //кнопка Сохранить изменения
        {
            OleDbConnection dbc = new OleDbConnection(conStr);
            da = new OleDbDataAdapter("SELECT * FROM Schedule", dbc);
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
 
            da.UpdateCommand = cb.GetUpdateCommand();
            //da.InsertCommand = cb.GetInsertCommand();
            //da.DeleteCommand = cb.GetDeleteCommand();
            da.Update(ds.Tables[0]);
         }
     }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2018, 22:19
Ответы с готовыми решениями:

Сохранение изменений сделанных программно в datagridview который связан с бд Access
В общем, у меня есть датагрид связанный через выбор источника данных, и он полностью заблокирован для пользователя, в программе меняется...

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

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

5
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
25.11.2018, 22:29  [ТС]
Еще добавил скриншот формы и где я например изменяю значение Вторая пара и нажимаю Save, и генерируется запрос следующего содержания:
"UPDATE Schedule SET Вторая пара = ? WHERE ((Код = ?) AND ((? = 1 AND Учитель IS NULL) OR (Учитель = ?)) AND ((? = 1 AND Первая пара IS NULL) OR (Первая пара = ?)) AND ((? = 1 AND Вторая пара IS NULL) OR (Вторая пара = ?)) AND ((? = 1 AND Третья пара IS NULL) OR (Третья пара = ?)) AND ((? = 1 AND Четвертая пара IS NULL) OR (Четвертая пара = ?)) AND ((? = 1 AND Пятая пара IS NULL) OR (Пятая пара = ?)) AND ((? = 1 AND Шестая пара IS NULL) OR (Шестая пара = ?)))"
Миниатюры
Сохранение изменений из DataGridView в бд access   Сохранение изменений из DataGridView в бд access  
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.11.2018, 23:47
Лучший ответ Сообщение было отмечено hax0r как решение

Решение

hax0r, OleDbCommandBuilder не смог корректно создать запрос, т.к. у вас используются пробелы в названиях полей. Переименуйте поля например так "Вторая_пара" или создавайте команды Update,Insert самостоятельно, где названия полей с пробелом берите в квадратные скобки.
1
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
26.11.2018, 19:33  [ТС]
Igr_ok, Спасибо огромное, выручили!
А как можно самому создать эти команды, если неизвестно какие поля будут модифицированы?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.11.2018, 22:04
Цитата Сообщение от hax0r Посмотреть сообщение
А как можно самому создать эти команды, если неизвестно какие поля будут модифицированы?
Вообще-то известно. DataTable хранит первоначальную версию всех значений(пока не будет вызван метод AccessChanged). И сравнивая старую и новую версию по всем полям, можно получить конкретные изменения. Пример: https://social.msdn.microsoft.... tacontrols
Но намного проще придерживаться правил именования полей в таблице, и вызывать метод Update в DataAdapter, чем страдать такой ... ерундой.
1
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
27.11.2018, 17:03  [ТС]
Цитата Сообщение от Igr_ok Посмотреть сообщение
Но намного проще придерживаться правил именования полей в таблице, и вызывать метод Update в DataAdapter, чем страдать такой ... ерундой.
Согласен с вами, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2018, 17:03
Помогаю со студенческими работами здесь

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

Сохранение изменений в БД через DataGridView
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Сохранение изменений в БД через DataGridView
Добрый вечер! Нашел отличный пример http://peshochkom.blogspot.com/2011_05_01_archive.html о том как сохранить изменения в БД через...

Сохранение изменений в бд через DataGridView
Прошу помощи в написании кода. Создаю интерфейс для базы данных ms sql. База подключена через BindingSource и таблицы выводятся в...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru