Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689

Запрос на Update с параметрами

01.06.2015, 12:55. Показов 4077. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, возникла просто не понятная для меня ситуация, есть не связанная таблица и к ней я написал запрос на добавления данных и удаления с параметрами, они работают, решил написать запрос на обновление и столкнулся с непонятной мне ситуацией. Запрос уходит в БД и не обновляет данные в таблице, нет ни исключения ничего совсем, вот сам запрос:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using (OleDbConnection conn = new OleDbConnection(Hotel.Properties.Settings.Default.HotelConnectionString))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand("Update Номера Set Категория = @category Where [Код номера] = @id", conn);
                for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    cmd.Parameters.Add(new OleDbParameter("@id", (int)dataGridViewCategory.Rows[i].Cells[0].Value));
                    cmd.Parameters.Add(new OleDbParameter("@category", dataGridViewCategory.Rows[i].Cells[1].Value.ToString()));
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
            }
            refreshDB();
Ставил точки останова и проверял, данные корректно передаются в параметры, а вот изменения в таблице не происходят, в чем подвох?

Добавлено через 47 минут
Пишу запрос с одним параметром и все корректно срабатывает, но я хочу чтобы было 2 параметра, что за ерунда, вот дырявый запрос который работает:
C#
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    OleDbCommand cmd = new OleDbCommand("Update Номера Set Категория = @category Where [Код номера] = " + (int)dataGridViewCategory.Rows[i].Cells[0].Value, conn);
                    //cmd.Parameters.Add(new OleDbParameter("@id", (int)dataGridViewCategory.Rows[i].Cells[0].Value));
                    cmd.Parameters.Add(new OleDbParameter("@category", dataGridViewCategory.Rows[i].Cells[1].Value.ToString()));
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2015, 12:55
Ответы с готовыми решениями:

Update с параметрами
Ребят, поделитесь плиз кто-нибудь рабочим кодом, где юзается Update с параметрами. Что-то у меня не обновляет нифига. А Insert с...

Как сделать UPDATE с помощью OleDBCommand и параметрами?
Может даст кто-нибудь примерчик?

UPDATE WHERE SET с параметрами из полей формы и переменных VBA
Не пойму где ошибка, уже прочёл тем 18 - вроде всё должно идти: Dim strPassword, Password As String Dim ID As...

12
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.06.2015, 13:53
OleDb вроде не умеет именованные параметры. Пробуй знаки вопроса вместо имен
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
01.06.2015, 13:56  [ТС]
pincet, Поподробнее можно? не совсем понял о чем вы имеете в виду.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.06.2015, 14:02
Цитата Сообщение от Midian Посмотреть сообщение
T-SQL
1
Update Номера Set Категория = ? Where [Код номера] = ?
вот так
1
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
01.06.2015, 14:05  [ТС]
pincet, Ничего не понял, вот мой запрос, исправьте в нем как должно быть по вашему мнению:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using (OleDbConnection conn = new OleDbConnection(Hotel.Properties.Settings.Default.HotelConnectionString))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand("Update Номера Set Категория = @category Where [Код номера] = @id", conn);
                for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    cmd.Parameters.Add(new OleDbParameter("@id", (int)dataGridViewCategory.Rows[i].Cells[0].Value));
                    cmd.Parameters.Add(new OleDbParameter("@category", dataGridViewCategory.Rows[i].Cells[1].Value.ToString()));
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
            }
            refreshDB();
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.06.2015, 14:07
Цитата Сообщение от pincet Посмотреть сообщение
Update Номера Set Категория = ? Where [Код номера] = ?
что ж тут непонятного-то?
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
01.06.2015, 14:08  [ТС]
pincet, Вы вообще понимаете, что я передаю именованные параметры в запрос вида @id и так далее, зачем там вопросы? Как компилятор должен понимать такую строку и подставлять нужный параметр?
0
27 / 27 / 10
Регистрация: 18.08.2014
Сообщений: 212
01.06.2015, 14:16
Midian, вместо @id ставите ? в самом запросе
параметры подставляются по порядку следования
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.06.2015, 14:17
Цитата Сообщение от pincet Посмотреть сообщение
OleDb вроде не умеет именованные параметры. Пробуй знаки вопроса вместо имен
чем истерить стоит может ответы почитать?
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
01.06.2015, 14:22  [ТС]
pincet, FroztBal, написал вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using (OleDbConnection conn = new OleDbConnection(Hotel.Properties.Settings.Default.HotelConnectionString))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand("Update Номера Set Категория = ? Where [Код номера] = ?", conn);
                for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    cmd.Parameters.Add(new OleDbParameter("?", dataGridViewCategory.Rows[i].Cells[1].Value.ToString()));
                    cmd.Parameters.Add(new OleDbParameter("?", (int)dataGridViewCategory.Rows[i].Cells[0].Value));
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
            }
            refreshDB();
Начал делать апдейт, но только для первой строки

Добавлено через 1 минуту
Написал так и все заработало верно, спасибо вам большое, не знал этих тонкостей Access:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using (OleDbConnection conn = new OleDbConnection(Hotel.Properties.Settings.Default.HotelConnectionString))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand("Update Номера Set Категория = ? Where [Код номера] = ?", conn);
                for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    cmd.Parameters.Add(new OleDbParameter("?", dataGridViewCategory.Rows[i].Cells[1].Value.ToString()));
                    cmd.Parameters.Add(new OleDbParameter("?", (int)dataGridViewCategory.Rows[i].Cells[0].Value));
                    try
                    {
                        cmd.ExecuteNonQuery(); cmd.Parameters.Clear();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
            }
            refreshDB();
0
27 / 27 / 10
Регистрация: 18.08.2014
Сообщений: 212
01.06.2015, 14:29
Тогда пробуй без пfраметров
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
OleDbCommand cmd = new OleDbCommand(conn);
 
     for (int i = 0; i < dataGridViewCategory.RowCount - 1; i++)
                {
                    string stroka=string.Format(@"Update Номера Set Категория = '{0}' Where [Код номера] = '{1}",dataGridViewCategory.Rows[i].Cells[1].Value.ToString(), dataGridViewCategory.Rows[i].Cells[0].Value.ToString());
 
                    cmd.CommandText=stroka;
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (InvalidOperationException err) { MessageBox.Show(err.ToString(), "Ошибка при обновлении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                }
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.06.2015, 14:36
Цитата Сообщение от FroztBal Посмотреть сообщение
Тогда пробуй без пfраметров
фу так делать
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
01.06.2015, 14:38  [ТС]
Написал выше, все работает, тема закрыта, всем спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2015, 14:38
Помогаю со студенческими работами здесь

Послать POST запрос запрос с двумя и более параметрами?
Делаю так: string ProxyString = &quot;&quot;; string URI = @&quot;http://www.easyprog.ru/test.php&quot;;; string...

запрос с параметрами
&amp;НаСервере Процедура Запрос() Имя=имяПользователя();/// так не работает ТЧ.ТекстЗапроса=&quot;ВЫБРАТЬ ...

Запрос с параметрами
ADOQuery1.SQL.Add('SELECT * FROM Организации Order By :2 asc'); ADOQuery1.Parameters.ParamByName('2').value:=s; Почему этот запрос...

Запрос с параметрами
1.5 Создать запрос «Парижский луч» на поиск моделей из бутика «Парижский шик» по имени Лида и из бутика «Луч» с фамилией, ...

Запрос с параметрами
Нужно создать поиск в базе данных с одной таблицей, по нескольким(8) полям. Я так понимаю, запрос с параметрами; параметры, на основе...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
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