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

Отсутствует значение для одного или нескольких требуемых параметров

24.03.2018, 14:05. Просмотров 408. Ответов 7
Метки нет (Все метки)

Никак не могу понять, как сделать рабочую UPDATE команду.
Почему-то без WHERE она прекрасно работает, но обновляет все строки, когда мне нужно обновить только одну.
И INSERT с теми же параметрами работает тоже без проблем.

C#
1
2
3
4
5
6
7
8
dataAdapter.UpdateCommand = new OleDbCommand($"UPDATE `{comboBox1.Text}` SET `Наименование продукции` = ?, `Стоимость единицы продукции, р` = ?, `Количество на складе, шт` = ?, `Гарантия на продукт, мес` = ? WHERE `Наименование продукции` = ?", connection1);
                dataAdapter.UpdateCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Наименование_продукции", OleDbType.VarWChar, 0, "Наименование продукции"),
            new OleDbParameter("Стоимость_единицы_продукции,_р", OleDbType.Integer, 0, "Стоимость единицы продукции, р"),
            new OleDbParameter("Количество_на_складе,_шт", OleDbType.Integer, 0, "Количество на складе, шт"),
            new OleDbParameter("Гарантия_на_продукт,_мес", OleDbType.Integer, 0, "Гарантия на продукт, мес")});
 
                dataAdapter.Update(table);
Помогите с этой злосчастной командой, пожалуйста, а то я в SQL вообще ничего не понимаю

Весь код кнопки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string queryString = "Select * from " + comboBox1.Text;
            using (OleDbConnection connection1 = new OleDbConnection($"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {fileName}"))
            {
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(queryString, connection1);
                dataAdapter.SelectCommand = new OleDbCommand(queryString);
                dataAdapter.InsertCommand = new OleDbCommand($"INSERT INTO `{comboBox1.Text}` (`Наименование продукции`, `Стоимость единицы продукции, р`, `Количество на складе, шт`, `Гарантия на продукт, мес`) VALUES (?, ?, ?, ?)", connection1);
                dataAdapter.InsertCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Наименование_продукции", OleDbType.VarWChar, 0, "Наименование продукции"),
            new OleDbParameter("Стоимость_единицы_продукции,_р", OleDbType.Integer, 0, "Стоимость единицы продукции, р"),
            new OleDbParameter("Количество_на_складе,_шт", OleDbType.Integer, 0, "Количество на складе, шт"),
            new OleDbParameter("Гарантия_на_продукт,_мес", OleDbType.Integer, 0, "Гарантия на продукт, мес")});
                dataAdapter.UpdateCommand = new OleDbCommand($"UPDATE `{comboBox1.Text}` SET `Наименование продукции` = ?, `Стоимость единицы продукции, р` = ?, `Количество на складе, шт` = ?, `Гарантия на продукт, мес` = ? WHERE `Наименование продукции` = ?", connection1);
                dataAdapter.UpdateCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Наименование_продукции", OleDbType.VarWChar, 0, "Наименование продукции"),
            new OleDbParameter("Стоимость_единицы_продукции,_р", OleDbType.Integer, 0, "Стоимость единицы продукции, р"),
            new OleDbParameter("Количество_на_складе,_шт", OleDbType.Integer, 0, "Количество на складе, шт"),
            new OleDbParameter("Гарантия_на_продукт,_мес", OleDbType.Integer, 0, "Гарантия на продукт, мес")});
 
                dataAdapter.Update(table);
 
            }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2018, 14:05
Ответы с готовыми решениями:

Отсутствует значение для одного или нескольких требуемых параметров
как победить эту ошибку? никак не пойму в чем дело, sql запрос вроде вполне корректный - удаление...

Обновление DataGridView: Отсутствует значение для одного или нескольких требуемых параметров
Здравствуйте!!! У меня почему-то выдает ошибку System.Data.OleDb.OleDbException: Отсутствует...

Ошибка "Отсутствует значение для одного или нескольких требуемых параметров"
Доброго времени суток! Помогите,пожалуйста, разобрать в ошибке. private BindingSource source...

DataAdaprer: "Отсутствует значение для одного или нескольких требуемых параметров"
int column = 8; string COLUN_NAME = new string { "Оператор", "Дата", "Номер",...

Запрос update - пишет "Отсутствует значение для одного или нескольких требуемых параметров!" (С# Access)
Не могу разобраться с этим запросом. Пишет "Отсутствует значение для одного или нескольких...

7
OwenGlendower
Супер-модератор
Эксперт .NET
10748 / 9177 / 3910
Регистрация: 17.03.2014
Сообщений: 18,357
Записей в блоге: 1
Завершенные тесты: 2
24.03.2018, 15:21 2
AlexMy700x, насколько я понимаю т.к. у Access параметры не имеют имени, то параметр для наименования продукции нужно добавить два раза
C#
1
2
3
4
5
6
7
    dataAdapter.UpdateCommand.Parameters.AddRange(new OleDbParameter[] {
        new OleDbParameter("Наименование_продукции", OleDbType.VarWChar, 0, "Наименование продукции"),
        new OleDbParameter("Стоимость_единицы_продукции,_р", OleDbType.Integer, 0, "Стоимость единицы продукции, р"),
        new OleDbParameter("Количество_на_складе,_шт", OleDbType.Integer, 0, "Количество на складе, шт"),
        new OleDbParameter("Гарантия_на_продукт,_мес", OleDbType.Integer, 0, "Гарантия на продукт, мес"),
        new OleDbParameter("Наименование_продукции2", OleDbType.VarWChar, 0, "Наименование продукции")
    });
1
AlexMy700x
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 12
24.03.2018, 15:40  [ТС] 3
Добавил, теперь выдаёт System.Data.DBConcurrencyException: "Нарушение параллелизма: UpdateCommand затронула 0 из ожидаемых 1 записей."
0
OwenGlendower
Супер-модератор
Эксперт .NET
10748 / 9177 / 3910
Регистрация: 17.03.2014
Сообщений: 18,357
Записей в блоге: 1
Завершенные тесты: 2
24.03.2018, 15:53 4
AlexMy700x, попробуй указать DataRowVersion.Original для параметра "Наименование_продукции2"

Добавлено через 1 минуту
C#
1
new OleDbParameter("Наименование_продукции2", OleDbType.VarWChar, 0, "Наименование продукции") { SourceVersion = DataRowVersion.Original }
1
24.03.2018, 15:53
AlexMy700x
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 12
24.03.2018, 16:01  [ТС] 5
Помогло, благодарю!
0
OwenGlendower
Супер-модератор
Эксперт .NET
10748 / 9177 / 3910
Регистрация: 17.03.2014
Сообщений: 18,357
Записей в блоге: 1
Завершенные тесты: 2
24.03.2018, 16:02 6
AlexMy700x, почему это помогло понимаешь?
0
AlexMy700x
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 12
24.03.2018, 16:09  [ТС] 7
Оно пыталось вызвать уже изменённую строчку вместо оригинала для поиска, и из-за этого ничего не находило?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10748 / 9177 / 3910
Регистрация: 17.03.2014
Сообщений: 18,357
Записей в блоге: 1
Завершенные тесты: 2
24.03.2018, 16:11 8
AlexMy700x, да. В WHERE подставлялось текущее значение колонки. Указав DataRowVersion.Original мы указали что нужно использовать значение до модификации.
1
24.03.2018, 16:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2018, 16:11

System.Data.OleDb.OleDbException: "Отсутствует значение для одного или нескольких требуемых параметров."
При запросе по сравнению двух компонентов через access выдает ошибку...

Как изменить данные? Ошибка "Отсутствует значение для одного или нескольких требуемых параметров"
Привет, всем! Пытаюсь обновить данные, но выводит ошибку System.Data.OleDb.OleDbException:...

Отсутствует значение для одного или нескольких параметров
Имеется БД, подключённая через datagridview. В ней мне нужно в зависимости от значения D запросом...


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

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

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