Форум программистов, компьютерный форум, киберфорум
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. Показов 4534. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru