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

Как обновить одновременно несколько полей в SQL?

09.05.2016, 16:27. Показов 3540. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу чтоб - если в массиве (array) у всех элементов статус равно 1, тогда поменять все их статусы одновременно на 2, но если хоть у одного элемента статус не равно 1, тогда не поменять статусы вообще не одному элементу!

У меня есть такой код на C#, но он не работает правильно (он меняет статусы в массиве у тех у которых статус равен 1, даже если у остальных статус 2), как его исправить?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
string inClause = "";
string comma = "";
string SelectCommand = "UPDATE table SET status= 2 WHERE status = 1 and id IN ";
 
for (int i = 0; i < array.Length; i++)
{
inClause += comma + array[i];
comma = ",";
}
 
SelectCommand = SelectCommand + "(" + inClause + ")";
MySqlCommand com = new MySqlCommand(SelectCommand, con);
com.ExecuteNonQuery();
P.S. и еще один вопрос, как узнать Update сработал правильно или нет? Я делаю так

C#
1
2
3
4
5
6
7
8
if (Convert.ToInt32(com.executeNonQuery()) != 0)
{
Обновил
}
else
{
Не обновил
}
Но запрос всегда возвращает 0?

Простите за мой плохой русский. спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.05.2016, 16:27
Ответы с готовыми решениями:

Как запустить несколько потоков одновременно?
Здравствуйте, не могу решить проблему с объявлением количества потоков, нужно чтобы запускалось сразу (например) 20 потоков. Вот код...

как запустить одновременно и отслеживать несколько процессов?
вот такой например процесс //создаем новый процесс, который будет работать с консолью pr = new Process(); ...

Как добавить, обновить и удалить несколько строк в DataTable?
Как можно сделать добавление не одной строки в DataTable, а сразу нескольких, если конечно такое возможно!? Так же для обновления и...

9
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
09.05.2016, 16:33
Цитата Сообщение от bex Посмотреть сообщение
он меняет статусы в массиве у тех у которых статус равен 1, даже если у остальных статус 2
Как эту фразу понимать?
Цитата Сообщение от bex Посмотреть сообщение
Но запрос всегда возвращает 0?
Значит нет записей, попадающих под условие изменения.
0
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 470
09.05.2016, 16:42
Цитата Сообщение от bex Посмотреть сообщение
C#
1
string SelectCommand = "UPDATE table SET status= 2 WHERE status = 1 and id IN ";
Попробуйте так:
C#
1
string SelectCommand = "UPDATE table SET status = 2 WHERE status = 1";
0
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 19
09.05.2016, 16:45  [ТС]
Я хочу чтоб если в массиве хоть у одного элемента статус равен 1 то тогда пусть не поменяет статусы вообще не одному элементу массива (пусть не выполнится), а мои код работает так - если хоть одному элементу в массиве статус равен 1 он его меняет на 2! пусть поменяет все элементы массива или не одного

Добавлено через 1 минуту
У меня так и написана
0
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 470
09.05.2016, 16:46
Цитата Сообщение от bex Посмотреть сообщение
У меня так и написана
Я процитировал ваш код и там, как вы можете видеть, не так. Там еще какое-то условие вы пытались впихнуть, да и пробелов между равно не было. Иногда из-за таких вещей бывают ошибки.
0
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 19
09.05.2016, 16:54  [ТС]
У меня в коде нет ошибки, код работает и меняет статусы, у меня ошибка в логике. мои код меняет статусы если даже в массиве один элемент равен 1 , а я хочу чтоб если не все элементы массива равно 1 то вообще не сработало update

Добавлено через 1 минуту
обновляет или не обновляет все равно возврашает 0
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
09.05.2016, 19:45
Цитата Сообщение от bex Посмотреть сообщение
WHERE status = 1
Это условие нужно убрать и делать проверку статусов перед обновлением. Т.к. все статусы должны быть равны 1, то сумма статусов должна быть равна кол-ву элементов массива.
SQL
1
2
3
4
  DECLARE @CHECK INT
  SET @CHECK = (SELECT SUM([STATUS]) FROM [TABLE] WHERE id IN(...))
  IF @CHECK=(сюда подставляем array.Length)
  UPDATE TABLE SET STATUS= 2 WHERE id IN(...)
1
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 19
10.05.2016, 13:47  [ТС]
Спасибо Igr_ok, Я думаю это то что я хотел, но как написать этот код на c#? не получается
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
10.05.2016, 14:11
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string inClause = "(";
string comma = "";
 
for (int i = 0; i < array.Length; i++)
{
inClause += comma + array[i];
comma = ",";
}
inClause +=")";
string SelectCommand = "DECLARE @CHECK INT "+
  "SET @CHECK = (SELECT SUM([STATUS]) FROM [TABLE] WHERE id IN"+inClause +
  " IF @CHECK="+array.Length.ToString()+
  " UPDATE TABLE SET STATUS= 2 WHERE id IN"+inClause;
MySqlCommand com = new MySqlCommand(SelectCommand, con);
com.ExecuteNonQuery();
0
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 19
11.05.2016, 10:53  [ТС]
ошибки видает

Добавлено через 16 минут
Fatal error encountered during command execution (0x80004005), Parameter '@CHECK' must be defined.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.05.2016, 10:53
Помогаю со студенческими работами здесь

Как одновременно добавить несколько строк в таблицу Access?
А возможно одновременно добавить несколько строк в таблицу Access? например как при вставке в таблицу MySQL: ... string insert =...

Как обновить данные в dataGridView из БД Sql
Доброго времени суток. Подскажите пожалуйста, не могу разобраться! Есть dataGridView, есть таблица SQL, если в БД Таблицу вносят новую...

Как обновить dataset после изменения структуры базы данных сервере sql
Здравствуйте, пишу приложение на c#. Подключаюсь к базе данных через сервер ms sql. Допустим есть таблица rabochie с полями(Имя, Фамилия,...

Выполнение одновременно несколько sql запросов одновременно
Здравствуйте. Есть проблема! Пролистал много сайтов и форумов и толком ничего не нашел. Суть проблемы указана в заголовке но все равно...

T-sql, Вывести несколько полей как одно
Заранее простите если не в том разделе, однако вроде обратился по адресу Вот в чем проблема у меня есть таблица в которой хранятся...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru