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

Запрос UPDATE не обновляет данные в таблице БД

31.05.2022, 02:52. Показов 1725. Ответов 10

Студворк — интернет-сервис помощи студентам
Не могу понять почему так происходит, я вроде бы всё правильно написал.
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
private void dataGridView3_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            accessGeneralData = true;
 
            try
            {
                if (dataGridView3.Rows[e.RowIndex].Cells[2].Value != null)
                {
                    for (int i = 0; i <= dsGeneralData.Tables["GeneralData"].Rows.Count - 1; i++)
                    {
                        string cellDataGrid = dataGridView3.Rows[e.RowIndex].Cells["Наименование"].Value.ToString();
                        string cellDataSet = dsGeneralData.Tables["GeneralData"].Rows[i]["Наименование"].ToString();
 
                        if (cellDataGrid == cellDataSet)
                        {
                            int boxes = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[2].Value);
                            int sold = Convert.ToInt32(dataGridView3.Rows[e.RowIndex].Cells[2].Value);
                            int elemRemains = Convert.ToInt32(dataGridView3.Rows[e.RowIndex].Cells[3].Value);
                            int remains = Convert.ToInt32(dataGridView3.Rows[e.RowIndex].Cells[4].Value);
                            int finRemains;
 
                            elemRemains = boxes - sold;
 
                            if (elemRemains < 0)
                            {
                                remains = remains + elemRemains;
 
                                for (int g = 1; remains <= 0; g++)
                                {
                                    remains++;
                                    elemRemains++;
 
                                    if (elemRemains < 0)
                                    {
                                        MessageBox.Show("Невозможно вычесть из остатка недостающие число, так как остаток меньше нуля.",
                                            "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }
                            }
 
                            finRemains = elemRemains + remains;
 
                            SqlCommand updateGeneralData = new SqlCommand($"UPDATE GeneralData SET Остаток @Ост WHERE Код = @Код", connection);
 
                            updateGeneralData.Parameters.AddWithValue("@Ост", finRemains);
                            updateGeneralData.Parameters.AddWithValue("@Код", i);
                            updateGeneralData.ExecuteNonQuery();
 
                            SqlCommand updateProduct = new SqlCommand($"UPDATE Product SET Остаток = @Ост WHERE Наименование = @Наименование", connection);
 
                            updateProduct.Parameters.AddWithValue("@Ост", finRemains);
                            updateProduct.Parameters.AddWithValue("@Наименование", cellDataSet);
                            updateProduct.ExecuteNonQuery();
                        }
 
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2022, 02:52
Ответы с готовыми решениями:

Не обновляет данные в таблице (UPDATE)
Здравствуйте! Есть форма, при помощи ajax'a обрабатываю данные. Ajax использует php-обработчик, который обновляет данные в таблице. ...

UPDATE не обновляет запись в таблице
Здравствуйте. Я имею код, который либо добавляет, либо обновляет запись в таблице БД SQL Server: using (SqlConnection con = new...

SqlAdapter Update не обновляет данные
Добрый день, пишу свой SQL Tool для курсового проекта, у меня данные выгружаются в DataGridView, для него я сделал 3 функции...

10
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
31.05.2022, 07:03
В 43 строке пропущен знак '=' в команде SET
0
0 / 0 / 1
Регистрация: 27.04.2022
Сообщений: 29
31.05.2022, 15:19  [ТС]
Всё равно не обновляется
0
 Аватар для Andrey-MSK
3353 / 2239 / 388
Регистрация: 14.08.2018
Сообщений: 7,569
Записей в блоге: 4
31.05.2022, 15:23
Цитата Сообщение от Vladimirovich- Посмотреть сообщение
Всё равно не обновляется
В MS SQL Profiler посмотрите что улетает на сервер. Если ничего, то ищите почему у вас не заходит выполнение вот сюда
C#
1
if (cellDataGrid == cellDataSet) { ... }
0
0 / 0 / 1
Регистрация: 27.04.2022
Сообщений: 29
31.05.2022, 15:41  [ТС]
Эта строка проходит проверку "if (cellDataGrid == cellDataSet)", и после неё выполняются запросы без ошибок, но в таблицу так ничего и не попадает. Возможно в обновление бд и DataGrid'ов причина проблем.
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
private void RefreshData()
        {
            connection = new SqlConnection(myCon);
 
            try
            {
                connection.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
 
            ChangeTables();
 
            dsProduct.Clear();
            dsHistory.Clear();
            dsGeneralData.Clear();
 
            adapterProduct = new SqlDataAdapter(myComProduct, connection);
            dsProduct = new DataSet();
 
            adapterProduct.Fill(dsProduct, "Product");
            dataGridView1.DataSource = dsProduct.Tables["Product"];
            dataGridView3.DataSource = dsProduct.Tables["Product"];
 
            adapterHistory = new SqlDataAdapter(myComHistory, connection);
            dsHistory = new DataSet();
 
            adapterHistory.Fill(dsHistory, "History");
            dataGridView2.DataSource = dsHistory.Tables["History"];
 
            adapterGeneralData.Fill(dsGeneralData, "GeneralData");
 
            adapterGeneralData = new SqlDataAdapter(myComGeneralData, connection);
            dsGeneralData = new DataSet();
 
            adapterGeneralData.Fill(dsGeneralData, "GeneralData");
 
            dataGridView1.Columns["Код"].ReadOnly = true;
            dataGridView1.Columns["Наименование"].ReadOnly = true;
            dataGridView1.Columns["Продано"].Visible = false;
            dataGridView1.Columns["Начальный остаток"].Visible = false;
            dataGridView1.Columns["Остаток"].Visible = false;
            dataGridView1.Columns["Дата упаковки"].ReadOnly = true;
 
            dataGridView3.Columns["Код"].ReadOnly = true;
            dataGridView3.Columns["Наименование"].ReadOnly = true;
            dataGridView3.Columns["Код"].ReadOnly = true;
            dataGridView3.Columns["Вес (в кг)"].Visible = false;
            dataGridView3.Columns["Всего коробок"].Visible = false;
            dataGridView3.Columns["Начальный остаток"].ReadOnly = true;
            dataGridView3.Columns["Остаток"].ReadOnly = true;
            dataGridView3.Columns["Дата упаковки"].ReadOnly = true;
 
            dataGridView1.AllowUserToAddRows = false;
            dataGridView2.AllowUserToAddRows = false;
            dataGridView3.AllowUserToAddRows = false;
        }
0
 Аватар для Andrey-MSK
3353 / 2239 / 388
Регистрация: 14.08.2018
Сообщений: 7,569
Записей в блоге: 4
31.05.2022, 15:45
Цитата Сообщение от Vladimirovich- Посмотреть сообщение
и после неё выполняются запросы без ошибок
Profiler что показывает? Что уходит на сервер, какие данные?

Добавлено через 2 минуты
Это раз, второе - блок try .. catch вешается на всю логику работы с БД, а не только на открытие соединения.
0
0 / 0 / 1
Регистрация: 27.04.2022
Сообщений: 29
31.05.2022, 17:48  [ТС]
Я сделать проверку, но не могу понять о чём здесь идёт речь, так как не владею данной программой
Миниатюры
Запрос UPDATE не обновляет данные в таблице БД   Запрос UPDATE не обновляет данные в таблице БД  
0
0 / 0 / 1
Регистрация: 27.04.2022
Сообщений: 29
31.05.2022, 19:28  [ТС]
Сейчас заметил, что у меня не работает в стороннем методе запрос с DELETE'ом. Всё это очень странно.
0
 Аватар для Andrey-MSK
3353 / 2239 / 388
Регистрация: 14.08.2018
Сообщений: 7,569
Записей в блоге: 4
01.06.2022, 08:21
Цитата Сообщение от Vladimirovich- Посмотреть сообщение
но не могу понять о чём здесь идёт речь
На втором скрине у вас выделен запрос на обновление, в окне программы внизу есть серая область и в ней пишется исполняемый запрос и его данные. Вот там и смотрите что реально уходит на сервер. Очень удобно видеть то что на самом деле происходит, если что-то идёт не так как хотелось...
0
0 / 0 / 1
Регистрация: 27.04.2022
Сообщений: 29
02.06.2022, 01:48  [ТС]
Andrey-MSK, понял, спасибо. Я разобрался в проблеме: как оказалось connectionString для БД необходимо было закрыть в моём методе LoadData(), а я его сделал специально открытым. Как это работает, я до сих пор не совсем понимаю, однако это помогло.
0
 Аватар для Andrey-MSK
3353 / 2239 / 388
Регистрация: 14.08.2018
Сообщений: 7,569
Записей в блоге: 4
02.06.2022, 08:17
Лучший ответ Сообщение было отмечено Vladimirovich- как решение

Решение

Цитата Сообщение от Vladimirovich- Посмотреть сообщение
а я его сделал специально открытым.
Соединение всегда открывается и закрывается в нужном месте. Оставлять его открытым не имеет смысла, так как у серверов есть ограничения на количество одновременно открытых соединений.

Вот вам пример метода с UPDATE с параметрами, перехватом ошибок, async/await, Task и т.д. Этот метод находится в отдельном классе, который выполняет функцию репозитория. И в нужном месте программы просто вызывается, отрабатывает и возвращает выполнение в вызывающий метод.
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
public async Task UpdateItemAsync(EObject itemToUpdate)
{
    string sqlText =
        "UPDATE dbo.tblEObject SET EObjectName = @eoName " +
        "WHERE ID_EObject = @eoID";
 
    using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
    {
        try
        {
            await sqlConnection.OpenAsync();
 
            using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection))
            {
                SqlParameter parameterEOName = new SqlParameter
                {
                    ParameterName = "@eoName",
                    Value = itemToUpdate.EObjectName,
                    SqlDbType = SqlDbType.NVarChar,
                    Size = 200,
                    Direction = ParameterDirection.Input
                };
                sqlCommand.Parameters.Add(parameterEOName);
 
                SqlParameter parameterID = new SqlParameter
                {
                    ParameterName = "@eoID",
                    Value = itemToUpdate.EObjectID,
                    SqlDbType = SqlDbType.Int,
                    Direction = ParameterDirection.Input
                };
                sqlCommand.Parameters.Add(parameterID);
 
                foreach (SqlParameter parameter in sqlCommand.Parameters)
                {
                    if (parameter.Value == null || parameter.Value as string == "")
                    {
                        parameter.Value = DBNull.Value;
                    }
                }
 
                await sqlCommand.ExecuteNonQueryAsync();
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException("Ошибка обновления объекта строительства.", ex);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2022, 08:17
Помогаю со студенческими работами здесь

Не обновляет данные через update
private void изменениеЖанраУчебникToolStripMenuItem_Click(object sender, EventArgs e) { sql_conn.Open(); ...

RS1.Update('USER','1'); не обновляет данные
Раньше обновлял поля в базе: Conn.Execute('update .....'); и все работало. Захотел попробывать обновлять без формирования SQL Пример:...

Update для DataGrid почему-то не обновляет данные.
Всем привет! в проекте есть функция Update у DataGrid. обновляю измененные данные. но когда запускаешь прогу, данные не...

Не обновляет данные в таблице
Пишу курсовую, все почти готово, у меня есть 3 базы и 1 запрос, так вот когда я добавляю данные в 3 базу нужно что бы обновились данные в...

Не обновляет данные в таблице
Помогите чайнику, начинающий в с#.В общем суть такая: создал БД на акцессе, нужно сделать приложение для работы с этой БД, пока что...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru