Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54

UPDATE не обновляет запись в таблице

19.11.2021, 09:30. Показов 2451. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Я имею код, который либо добавляет, либо обновляет запись в таблице БД SQL Server:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using (SqlConnection con = new SqlConnection())
{
    try
    {
        con.ConnectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\TestsDB.mdf;Integrated Security=True";
        con.Open();
        string s;
        if (id == 0) s = "INSERT INTO Tests (Name,[Group],Date,Score,Questions) VALUES (@Name,@Group,@Date,@Score,@Questions)";
        else { s = "UPDATE Tests SET [Name] = @Name, [Group] = @Group, [Date] = @Date, Score = @Score, Questions = @Questions WHERE Id=@Id"; }
        using (SqlCommand cmd = new SqlCommand(s, con))
        {
            cmd.Parameters.Add(new SqlParameter("@Name", tb_name.Text));
            cmd.Parameters.Add(new SqlParameter("@Group", tb_group.Text));
            cmd.Parameters.Add(new SqlParameter("@Date", c_date.SelectedDate));
            cmd.Parameters.Add(new SqlParameter("@Score", ddl_score.SelectedValue));
            cmd.Parameters.Add(new SqlParameter("@Questions", ta_questions.Text));
            if (id != 0) cmd.Parameters.Add(new SqlParameter("@Id", id));
            cmd.ExecuteNonQuery();
        }
        Response.Redirect("Main.aspx");
    }
    catch { Response.Write("Произошла какая-то ошибка!"); }
}
При выполнении этого кода новые записи в БД добавляются. При обновлении записи в БД cmd.ExecuteNonQuery() возвращает 1, но запись в БД не изменяется.

При этом, при выполнении запроса:
SQL
1
2
3
4
5
6
USE <DBName>
BEGIN TRANSACTION
SELECT * FROM Tests
UPDATE Tests SET [Name] = N'фыва', [GROUP] = N'фыва', [DATE] = 2021-11-20, Score = 2, Questions = N'фыва' WHERE Id = 12
SELECT * FROM Tests
ROLLBACK TRANSACTION
Запись изменяется.

Почему update не обновляет запись?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2021, 09:30
Ответы с готовыми решениями:

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

Update : обновляет только цифры
Здравствуйте! Помогите пожалуйста, при update обновляет только цифры, а текст нет;( Код(смотреть функцию prelim) : student_model.php...

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

18
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 10:03
изучай
https://docs.microsoft.com/en-... rver-ver15
https://docs.microsoft.com/en-... rver-ver15 (тут если версия сервака позволяет)
1
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54
19.11.2021, 10:22  [ТС]
Я знаю, что делает rollback, а merge для такой задачи очень вряд ли нужен.

Вопрос был в том, почему не происходит обновление из кода на C#?
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 10:41
Цитата Сообщение от Disaczar Посмотреть сообщение
merge для такой задачи очень вряд ли нужен.
Цитата Сообщение от Disaczar Посмотреть сообщение
if (id == 0) s = "INSERT INTO Tests (Name,[Group],Date,Score,Questions) VALUES (@Name,@Group,@Date,@Score,@Questions)";
        else { s = "UPDATE Tests SET [Name] = @Name, [Group] = @Group, [Date] = @Date, Score = @Score, Questions = @Questions WHERE Id=@Id"; }
как это понимать?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
19.11.2021, 10:43
посмотри в профайлере какой запрос на обновление послан серверу
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 10:43
Цитата Сообщение от Disaczar Посмотреть сообщение
Запись изменяется.
ой-ли? или это только типа тест?
0
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54
19.11.2021, 10:45  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
ой-ли? или это только типа тест?
Да, это я тестировал апдейт на запросе, похожем на запрос из кода.
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,589
Записей в блоге: 4
19.11.2021, 11:02
Цитата Сообщение от Disaczar Посмотреть сообщение
T-SQL
1
[DATE] = 2021-11-20
Я чет не уверен про вот это...
0
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54
19.11.2021, 11:11  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Я чет не уверен про вот это...
Ну, дату такой запрос устроил.
Да и проблема всё равно в коде на С#, так как из него не обновляются данные, когда при добавлении всё работает хорошо.

Добавлено через 1 минуту
Цитата Сообщение от pincet Посмотреть сообщение
как это понимать?
Так и понимать, что если Id == 0, то запись надо добавить, если не 0, то обновить запись с указанным id.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 11:35
Цитата Сообщение от Disaczar Посмотреть сообщение
Так и понимать, что если Id == 0, то запись надо добавить, если не 0, то обновить запись с указанным id.
и в где нет показаний заюзать merge?

Добавлено через 1 минуту
Цитата Сообщение от Disaczar Посмотреть сообщение
При обновлении записи в БД cmd.ExecuteNonQuery() возвращает 1, но запись в БД не изменяется.
триггеры детектед?
1
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
19.11.2021, 11:41
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Я чет не уверен про вот это
выполнится, число 1900 преобразуется в дату в районе 1905 года )
1
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54
19.11.2021, 11:54  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
триггеры детектед?
В БД всего одна таблица. Больше там ничего нет.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 11:59
Цитата Сообщение от Аватар Посмотреть сообщение
посмотри в профайлере какой запрос на обновление послан серверу
там local db. не уверен, что есть профайлеры
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,589
Записей в блоге: 4
19.11.2021, 12:00
Цитата Сообщение от pincet Посмотреть сообщение
не уверен, что есть профайлеры
Работает профайлер из SSMS с LocalDB
1
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 12:00
Цитата Сообщение от Disaczar Посмотреть сообщение
При обновлении записи в БД cmd.ExecuteNonQuery() возвращает 1, но запись в БД не изменяется.
как вангование - id не тот прилетает хз знает откуда
но рили - такой подход - гуано
мешаешь коней, людей, сортиры и котлеты
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,589
Записей в блоге: 4
19.11.2021, 12:03
скрин
Миниатюры
UPDATE не обновляет запись в таблице  
1
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.11.2021, 12:11
Цитата Сообщение от Disaczar Посмотреть сообщение
cmd.ExecuteNonQuery() возвращает 1
показывет, что одна запись проучаствовала и не более
Executes a Transact-SQL statement against the connection and returns the number of rows affected.

https://docs.microsoft.com/en-... at-ext-6.0

Добавлено через 5 минут
Цитата Сообщение от Disaczar Посмотреть сообщение
WHERE Id = 12
ясен пень хардкод рулит
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,589
Записей в блоге: 4
19.11.2021, 12:34
pincet, я тоже с MERGE затупил Совсем эта фича из головы вылетела
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
private async void SaveSystemExecuted(object obj)
{
    if (SheetNumber != null & SheetName != null)
    {
        SheetNumber = Helpers.TrimSpaces(SheetNumber);
        SheetName = Helpers.TrimSpaces(SheetName);
 
        DrawSystem drawSystem = new DrawSystem
        {
            DrawSystemID = IDSheet,
            DrawSystemSheet = SheetNumber,
            DrawSystemName = SheetName,
            DrawID = CurrentDraw.DrawID
        };
 
        try
        {
            if (IDSheet > 0)
            {
                int index = DrawSystems.IndexOf(DrawSystems.FirstOrDefault(ds => ds.DrawSystemID == IDSheet));
 
                await _drawSystemDA.UpdateDrawSystemAsync(drawSystem);
                DrawSystems[index] = drawSystem;
                SelectedDrawSystem = DrawSystems.FirstOrDefault(ds => ds.DrawSystemID == drawSystem.DrawSystemID);
            }
            else
            {
                await _drawSystemDA.AddDrawSystemAsync(drawSystem);
                DrawSystems.Add(drawSystem);
                SelectedDrawSystem = DrawSystems.FirstOrDefault(ds => ds.DrawSystemID == drawSystem.DrawSystemID);
            }
 
            ClearSystemFields();
        }
        catch (Exception ex)
        {
            WindowService.ShowErrorMessage(ex.ToString(), "Ошибка обновления данных листа");
        }
    }
    else
    {
        WindowService.ShowErrorMessage("Все поля должны быть заполнены.", "Ошибка ввода данных");
    }
}
0
8 / 7 / 2
Регистрация: 24.02.2017
Сообщений: 54
19.11.2021, 13:05  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
как вангование - id не тот прилетает хз знает откуда
Я даже перепроверил - Id в параметрах тот, который нужен и который точно есть в БД.
Цитата Сообщение от pincet Посмотреть сообщение
но рили - такой подход - гуано
Знаю

Добавлено через 23 минуты
Цитата Сообщение от pincet Посмотреть сообщение
ясен пень хардкод рулит
Кстати, о хардкоде. Я сделал такой запрос, но уже в коде на C#. И на самом деле - всё апдейтится в БД. Проблема оказалась в полях веб форм, которые после задания им значения (собственно, считанного из БД по Id в page_load) никак уже не хотят меняться. И получалось, что данные в БД менялись на точно такие же. Всё потому, что в page_load не было проверки IsPostBack.

Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2021, 13:05
Помогаю со студенческими работами здесь

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

MySQLAdapter.Update не обновляет значения в бд
Пытаюсь работать с бд MySQL. Данные в Crid выводит но при попытке обновления выдает ошибку - System.Data.DBConcurrencyException произошло...

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

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

Adapter.Update(DataSet) - не обновляет первую строку
Добрый день! Мучаюсь с проблемой уже пару дней, не могу победить. Имеется таблица (Access). Сделал небольшое приложение на с#...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru