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

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

25.11.2018, 22:19. Просмотров 1323. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2018, 22:19
Ответы с готовыми решениями:

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

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

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

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

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

5
hax0r
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
25.11.2018, 22:29  [ТС] 2
Еще добавил скриншот формы и где я например изменяю значение Вторая пара и нажимаю 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 (Шестая пара = ?)))"
0
Миниатюры
Сохранение изменений из DataGridView в бд access   Сохранение изменений из DataGridView в бд access  
Igr_ok
435 / 401 / 191
Регистрация: 04.08.2015
Сообщений: 1,095
25.11.2018, 23:47 3
Лучший ответ Сообщение было отмечено hax0r как решение

Решение

hax0r, OleDbCommandBuilder не смог корректно создать запрос, т.к. у вас используются пробелы в названиях полей. Переименуйте поля например так "Вторая_пара" или создавайте команды Update,Insert самостоятельно, где названия полей с пробелом берите в квадратные скобки.
1
hax0r
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
26.11.2018, 19:33  [ТС] 4
Igr_ok, Спасибо огромное, выручили!
А как можно самому создать эти команды, если неизвестно какие поля будут модифицированы?
0
Igr_ok
435 / 401 / 191
Регистрация: 04.08.2015
Сообщений: 1,095
26.11.2018, 22:04 5
Цитата Сообщение от hax0r Посмотреть сообщение
А как можно самому создать эти команды, если неизвестно какие поля будут модифицированы?
Вообще-то известно. DataTable хранит первоначальную версию всех значений(пока не будет вызван метод AccessChanged). И сравнивая старую и новую версию по всем полям, можно получить конкретные изменения. Пример: https://social.msdn.microsoft.com/Fo...msdatacontrols
Но намного проще придерживаться правил именования полей в таблице, и вызывать метод Update в DataAdapter, чем страдать такой ... ерундой.
1
hax0r
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
27.11.2018, 17:03  [ТС] 6
Цитата Сообщение от Igr_ok Посмотреть сообщение
Но намного проще придерживаться правил именования полей в таблице, и вызывать метод Update в DataAdapter, чем страдать такой ... ерундой.
Согласен с вами, спасибо
0
27.11.2018, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2018, 17:03

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

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

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


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

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

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