Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 20.02.2010
Сообщений: 65

Ошибка при Update "Update requires a valid InsertCommand when passed DataRow collection with new rows"

15.03.2012, 02:32. Показов 4519. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Я в этом всем новичек и поэтому совсем не могу понять в чем ошибка. В общем, имеется вот такой код:
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
DataSet dataSet = new DataSet();
                string commandString = "select * from dbo.Должности"; ;
                SqlDataAdapter adapter = new SqlDataAdapter(commandString, connectionString);
                adapter.Fill(dataSet, "Должности");
 
                DataRow newRow = dataSet.Tables["Должности"].NewRow();
 
                if (comboBoxPod.SelectedIndex == 0)
                {
                    newRow["ID_подразделения"] = 1;
                }
                else
                    if (comboBoxPod.SelectedIndex == 1)
                    {
                        newRow["ID_подразделения"] = 5;
                    }
                    else
                        if (comboBoxPod.SelectedIndex == 2)
                        {
                            newRow["ID_подразделения"] = 14;
                        }
                        else
                            if (comboBoxPod.SelectedIndex == 3)
                            {
                                newRow["ID_подразделения"] = 6;
                            }
                            else
                                if (comboBoxPod.SelectedIndex == 4)
                                {
                                    newRow["ID_подразделения"] = 4;
                                }
                                else
                                    if (comboBoxPod.SelectedIndex == 5)
                                    {
                                        newRow["ID_подразделения"] = 1;
                                    }
                                    else
                                        if (comboBoxPod.SelectedIndex == 6)
                                        {
                                            newRow["ID_подразделения"] = 3;
                                        }
                                        else
                                            if (comboBoxPod.SelectedIndex == 7)
                                            {
                                                newRow["ID_подразделения"] = 10;
                                            }
                                            else
                                                if (comboBoxPod.SelectedIndex == 8)
                                                {
                                                    newRow["ID_подразделения"] = 12;
                                                }
                                                else
                                                    if (comboBoxPod.SelectedIndex == 9)
                                                    {
                                                        newRow["ID_подразделения"] = 13;
                                                    }
                                                    else
                                                        if (comboBoxPod.SelectedIndex == 10)
                                                        {
                                                            newRow["ID_подразделения"] = 7;
                                                        }
                                                        else
                                                            if (comboBoxPod.SelectedIndex == 11)
                                                            {
                                                                newRow["ID_подразделения"] = 9;
                                                            }
                                                            else
                                                                if (comboBoxPod.SelectedIndex == 12)
                                                                {
                                                                    newRow["ID_подразделения"] = 11;
                                                                }
                                                                else
                                                                    if (comboBoxPod.SelectedIndex == 13)
                                                                    {
                                                                        newRow["ID_подразделения"] = 2;
                                                                    }
 
                newRow["Наименование_должности"] = TBname_dol.Text;
                newRow["Кол_раб_мест"] = TBkol_rm.Text;
                newRow["Кол_занятых"] = 0;
                newRow["Кол_свободных"] = TBkol_rm.Text;
                newRow["Оклад"] = TB_okl.Text;
 
                dataSet.Tables["Должности"].Rows.Add(newRow);
                adapter.Update(dataSet.Tables["Должности"]);
                dataSet.AcceptChanges();
И при его выполении на строке
C#
1
adapter.Update(dataSet.Tables["Должности"]);
является вот такая ошибка: Update requires a valid InsertCommand when passed DataRow collection with new rows.

Не могу понять в чем дело. Помогите пожалуйста исправить!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2012, 02:32
Ответы с готовыми решениями:

Не получается сделать Update (Update requires a valid InsertCommand)
Не получается сделать Update выдаёт ошибку, что делаю не так? В таблице только одно поле, оно строковое. public void...

Ошибка обновления данных (Update requires a valid InsertCommand)
Уважаемы форумчане, по чему у меня не выполняеться обновление делаю так data_adapt.Update(kyrsDataSet.Tables); выдает ошибку ...

Для элемента Update требуется действительный InsertCommand при передаче коллекции DataRow
Всем привет) Люди помогите с кодом не пойму чего программа хочет. Написал программу на Visual C++ 2010 Express. Программа должна работать...

7
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
15.03.2012, 09:30
Сообщение говорит о том, что для вставки новой записи используется INSERT, а не UPDATE
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
15.03.2012, 10:12
У адаптера не задан InsertCommand. Его надо прописать, или сгенерить с помощью CommandBuilder.
0
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
15.03.2012, 14:23
Не совсем по теме, но код это просто режет глаз. Вынесите определение ID подразделения в отдельный метод и используйте хотя бы оператор switch, ибо многоэтажный элс-иф дурно пахнет.
C#
1
2
3
4
5
6
7
8
9
10
11
newRow["ID_подразделения"] = GetID();
 
private int GetID()
{
      switch (comboBoxPod.SelectedIndex)
      {
            case 0: return 1;
            case 1: return 5;
            // и так для всех случаев
      }
}
Добавлено через 2 минуты
Здесь использование SqlCommandBuilder для генерации команды Update.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
15.03.2012, 15:32
Используйте следующий код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string commandString = @"Insert into dbo.Должности 
Values(@ID_подразделения, 
@Наименование_должности,
@Кол_раб_мест,
@Кол_занятых,
@Кол_свободных,
@Оклад
)" ;
OleDbConnection conn =  new OleDbConnection(connectionString);
OleDbCommand com =  new OleDbCommand(commandString, conn);
com.Parameters.Add(new OleDbCommand("@ID_подразделения", GetID()));
//...Все остальные параметры
com.Parameters.Add(new OleDbCommand("@Оклад",TB_okl.Text));
com.ExecuteNonQuery();
это вставит одну строчку в базу данных.
а Загружать таблицу для этой цели при помощи адаптера совсем не надо!
0
1 / 1 / 1
Регистрация: 20.02.2010
Сообщений: 65
16.03.2012, 14:08  [ТС]
Цитата Сообщение от serg42 Посмотреть сообщение
У адаптера не задан InsertCommand. Его надо прописать, или сгенерить с помощью CommandBuilder.
А можно подробнее? а то я в этом совсем не разбираюсь =(


Jezofine
Спасибо, конечно, но нового Вы мне ничего не открыли. Это есть черновой вариант, т.к. я пытаюсь разобраться.
Да, большое спасибо за ссылку, но мне бы конкретный пример на бобавление записи помог бы намного больше. =)

Learx
Я читала что OleDb используется при работе с Acsess, забыла указать что работаю с SQL. Но все равно спасибо
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
17.03.2012, 18:23
ну я ошибся в выборе базы данных. Поменяйте OleDb на Sql и будет вам счастье.

создать Insert команду адаптеру можно например, так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string commandString = @"Insert into dbo.Должности 
Values(@ID_подразделения, 
@Наименование_должности,
@Кол_раб_мест,
@Кол_занятых,
@Кол_свободных,
@Оклад
)" ;
SqlConnection conn =  new SqlConnection(connectionString);
OleDbCommand com =  new SqlDbCommand(commandString, conn);
com.Parameters.Add("@ID_подразделения", SqlDbType.Int).SourceColumn = "ID_подразделения";
//...Все остальные параметры
com.Parameters.Add("@Оклад", SqlDbType.NVarChar).SourceColumn = "Оклад";
com.ExecuteNonQuery();
 
SqlDataAdapter ada = new SqlDataAdapter();
ada.InsertCommand =  com;
ada.Update(table);
и тогда адаптер вставит все новые строчки из table в БД.
1
1 / 1 / 1
Регистрация: 20.02.2010
Сообщений: 65
18.03.2012, 01:45  [ТС]
огромное спасибо!!! =)

Добавлено через 1 час 51 минуту
Цитата Сообщение от Learx Посмотреть сообщение
ada.Update(table);
Забыла спросить: а что есть table и откуда он берется?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2012, 01:45
Помогаю со студенческими работами здесь

DataGrid update ПРОБЛЕМА: Key column information is insufficient or incorect. Too many rows were affected by update
Привет всем ! В Вижуал Басик6 на форме имею ДатаГрид с информацией из Аксцессс 2000. Соединение - АДО. Пропертями усе установленно...

В чём причина ошибки "Update requires a valid UpdateCommand ..."?
БД Access. Происходит при сохранении изменений в БД DialogResult dialog = MessageBox.Show( "Вы действительно...

0 rows update when that should have been 1
Используется HeidiSQL. MySql 5,7 х64 При добавлении(обновлении) записи в поле TINYINT (или INT). Добавляются числа: 100, 150.....

Update all rows
Добрый день я ни чего в этом не понимаю, прошу о снисхождение. Подскажите пожалуйста, как правильно сделать UPDATE ALL ROWS чтобы база...

Ошибка: Query-based update failed because the row to update could not be found
Narod, kto-nibud' stalkivalsia s takoi problemoi: is VB connect to mySQL db, rs.Open 'SELECT * FROM <tablename> WHERE <columnname> =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru