Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301

Ошибка при обновлении таблицы БД

27.10.2010, 22:01. Показов 4546. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Подскажите пожалуйста в чем проблема. Вношу новую запись в таблицу пытаюсь обновить и вылезает ошибка "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records". Это только если вносить изменения в новую строку. Если вносить изменения в имеющееся строки то обновляет без проблем.

Вот код добавления записи программно (при добавлении вручную тоже самое)
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
private void каталогПродукцииToolStripMenuItem_Click(object sender, EventArgs e)
        {
//Вызов формы пополнения каталога продукции
            Form6 Products = new Form6();
            if (Products.ShowDialog() == DialogResult.OK)
            {
                this.naimenovanie = Products.naimenovanie;
                this.productNumber = Products.productNumber;
                string[] PrNames = naimenovanie.Split('/');
                string[] PrNumbers = productNumber.Split('/');
                for (int i = 0; i <  3; i++)
                {
 
                    if (dataGridView1.Rows.Count < 3)
                    {
                        katalogPlanDataSet.Table_1.Rows.Add();
                    }
                    dataGridView1.Rows[i].Cells[0].Value = System.Convert.ToInt32(PrNumbers[i]);
                    dataGridView1.Rows[i].Cells[1].Value = PrNames[i];
                }
 
            }
 
        }
Кнопка обновления
C#
1
table_1TableAdapter.Update(this.katalogPlanDataSet.Table_1);
А вот UpdateCommand

SQL
1
2
3
UPDATE       Table_1
SET                [Наименование продукции] = @value1, Производительность = @value2, Спрос = @value3
WHERE        ([Номер продукта] = @ProductNumber)
До этого по такой же схеме все работало вроде.

Помогите пожалуйста.

Добавлено через 20 минут
Есть подозрение что это из-за того, что строка, которую я хочу заполнить создана программно.
Теперь не знаю что с ней сделать. Как удалить можно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2010, 22:01
Ответы с готовыми решениями:

Ошибка при обновлении таблицы JTable
Есть функция reloadTable: public void reloadTable() { tModel = new TableModel(); table.setModel(tModel); ...

Ошибка при попытке обновлении данных таблицы Access
Есть большая таблица с данными по приборам. Она загружается в датагрид. Но при попытке сохранения изменений из датагрида через метод...

При обновлении таблицы обновляеться дата
К столбику дата присвоен атрибут CURRENT_TIMESTAMP, создании новой строчки устанавливаеться текущая дата, так должно быть, но при...

26
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
28.10.2010, 01:49
Насколько я понял, данная ошибка возникает, если вы пытаетесь обновить данные, когда компонент таблицы находится в режиме редактирования. Попробуйте непосредственно перед Update выполнять метод EndInit() для вашего DataSet.
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 07:48  [ТС]
Тоже самое, но более локально. Объясню:

При первом запуске приложения DataGridView, к которой подключена база пустая, также как и база. Я запускаю алгоритм, который переносит в базу данные из массива. Все хорошо данные перенеслись. Делаю Update тоже все хорошо не ругается. Закрываю приложение. Открываю снова в DataGridView нет первой строки - пустые все столбцы. При попытке записать что либо в эту строку вылетает вышеупомянутая ошибка. Все остальные строки записываются без проблем.

Проблема не возникает если начать запись со второй строки а не с первой, в связи с этим вопрос. Как можно очистить строку и как можно её удалить?
Спасибо.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.10.2010, 08:40
piloterist, для того чтобы вносилась новая строка необходимо определить InsertCommand для указанного адаптера, тогда метод Update отработает правильно. По хорошему следует также определить и DeleteCommand на случай, если будет удаление.
Запрос Update (я имею ввиду SQL запрос) не может вставлять данные.
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 08:44  [ТС]
Ну он вроде как автоматически создается студией при добавлении таблицы:

INSERT INTO Table_5
([Номер продукта], [Наименование продукта], Производительность, Себестоимость)
VALUES (@Номер_продукта,@Наименование_продукта, @Производительность,@Себестоимость)


Все значения заносятся правильно и обновляются, а вот первая строка остается пустой и в неё ничего не дает записать больше.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.10.2010, 08:55
НЕ понимаю как может быть 1-ая. Ты же добавляешь новую строку в конец dataSet.table.Rows.Add(...)
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 09:06  [ТС]
Изначально DataGridView так же как и DataSet пусмтые абсолютно, строк нет. В цикле идет проверка нужны ли новые строки и если нужно добавляю нужное количество строк и в них записываю элементы массива. После обновления первая строка пустая.
Далее каждый раз, если в массиве изменились элементы я его полностью перезаписываю, т.е. не только новую строку или измененную, а все.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Вызов формы пополнения каталога продукции
            Form6 Products = new Form6();
            if (Products.ShowDialog() == DialogResult.OK)
            {
                this.naimenovanie = Products.naimenovanie;
                this.productNumber = Products.productNumber;
                string[] PrNames = naimenovanie.Split('/');
                string[] PrNumbers = productNumber.Split('/');
                for (int i = 0; i <  5; i++)
                {
                    if (dataGridView1.Rows.Count < 5)
                    {
                        katalogPlanDataSet8.Table_5.Rows.Add();
                    }
                    
                    katalogPlanDataSet8.Table_5.BeginInit();
                    dataGridView1.Rows[i].Cells[0].Value = System.Convert.ToInt32(PrNumbers[i]);
                    dataGridView1.Rows[i].Cells[1].Value = PrNames[i];
                    
                }
                katalogPlanDataSet8.Table_5.EndInit();
                table_5TableAdapter.Update(katalogPlanDataSet8.Table_5);
            }
После запуска алгоритма таблица выглядит как на первой картинке.

Обновление проходит без ошибок. Закрываю приложение. Открываю и вижу в таблице то что на второй картинке.

Т.е. первой строки тупо нет. И если туда попробовать что-то написать и обновить то вылезает ошибка которая в первом сообщении.
Миниатюры
Ошибка при обновлении таблицы БД   Ошибка при обновлении таблицы БД  
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 10:12  [ТС]
Я конечно подозреваю что я делаю все через одно место, и был бы признателен если бы мне подсказали как правильно сделать без этого гемороя.

Суть проблемы в следующем:
Есть табличка БД, с заполненными данными. Она подключена к "форме 2", которая вызывается из "формы 1". Задача перенести значения из двух столбцов "формы 2" в два столбца "формы 1". И чтобы при изменении значений в столбцах "формы 2" изменения также переносились в столбцы таблицы в "форме 1".

Наверняка намного проще и правильнее сделать это через запросы. Но за неимением такого опыта я решил копировать содержание столбцов "формы 2" в массив, передавать массив в "форму 1" и данные из этого массива записывать в таблицу в "форме 1". Ну и столкнулся с вышеописанной проблемой.

Подскажите решение пожалуйста, очень важный момент.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.10.2010, 13:29
Цитата Сообщение от piloterist Посмотреть сообщение
Суть проблемы в следующем:
Есть табличка БД, с заполненными данными. Она подключена к "форме 2", которая вызывается из "формы 1". Задача перенести значения из двух столбцов "формы 2" в два столбца "формы 1". И чтобы при изменении значений в столбцах "формы 2" изменения также переносились в столбцы таблицы в "форме 1".
Вот теперь немного понятнее А на разных формах подключение к одной таблице БД?

Добавлено через 2 минуты
Если да, просмотри эту тему
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 14:58  [ТС]
Нет таблицы разные. Просто таблица на "форме 1" содержит два столба те же что и таблица на "форме 2". Но при этом данные в этих столбцах заносятся и редактируются только в таблице на "форме 2".

Задача, чтобы при изменении данных в таблице на "форме 2" эти же данные были и в таблице на "форме 1". Я пытался это реализовать через обмен массивами, но не смог.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.10.2010, 17:50
Я вижу на первой картинке пустые поля. Как БД относится к отсутствию некоторых значений в запросе?
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
28.10.2010, 18:02  [ТС]
Нормально относится, я при формировании таблицы для каждого столбца поставил "Allow Nulls". А из базы в базу надо передавать только два первых столбца.

А вот почему первая строка пропадает я хоть убейте не пойму.
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
29.10.2010, 09:54
Цитата Сообщение от piloterist Посмотреть сообщение
Суть проблемы в следующем:
Есть табличка БД, с заполненными данными. Она подключена к "форме 2", которая вызывается из "формы 1". Задача перенести значения из двух столбцов "формы 2" в два столбца "формы 1". И чтобы при изменении значений в столбцах "формы 2" изменения также переносились в столбцы таблицы в "форме 1".
Наверняка намного проще и правильнее сделать это через запросы. Но за неимением такого опыта я решил копировать содержание столбцов "формы 2" в массив, передавать массив в "форму 1" и данные из этого массива записывать в таблицу в "форме 1". Ну и столкнулся с вышеописанной проблемой.
piloterist, в форму добавления продуктов передавайте в конструкторе ссылку на dataset, в котором находится нужная таблица и добавляйте строки прямо в него.
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
29.10.2010, 16:02  [ТС]
К каждой форме привязан свой DataSet. Это две разных таблицы БД. Задача передавать данные из столбцов одной таблицы в столбцы другой.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
30.10.2010, 09:56
Цитата Сообщение от piloterist Посмотреть сообщение
К каждой форме привязан свой DataSet. Это две разных таблицы БД. Задача передавать данные из столбцов одной таблицы в столбцы другой
Это не проблема, передавай ссылку, они все равно имеют разные имена, и прога интерпретирует их по разному.
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
30.10.2010, 10:03  [ТС]
А можно пример, как в ссылке передать значения конкретных столбцов?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
30.10.2010, 10:16
piloterist, вот привязался ты к этим столбцам
Приблизительный код
на форме 2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
myDataSet ds;
        public Form2(myDataSet _ds)
        {
            InitializeComponent();
            ds = _ds;
        }
 
        void MyMethod()
        {
            ds.MyTable.Rows.Add();
            // а дальше делай как и предполагал
        }
на 1 форме
C#
1
2
Form2 f=new Form2(MyDataSet);//передаешь текущий датасет
f.ShowDialog();
Ну или не датасет передавать, а только таблицу нужную
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
30.10.2010, 10:59  [ТС]
Какой идентификатор должен быть у "_ds"?
C#
1
public Form2(myDataSet _ds)
Что есть myDataSet? namespase?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
30.10.2010, 11:21
Цитата Сообщение от piloterist Посмотреть сообщение
Какой идентификатор должен быть у "_ds"?
Код C#
public Form2(myDataSet _ds)
Что есть myDataSet? namespase?
Если подключение писалось вручную, то это просто тип DataSet.
Если ты создавал подключение к БД автоматически, то там будет тип данных не DataSet, а какой-то другой (посмотри какого типа твой katalogPlanDataSet).
0
4 / 4 / 0
Регистрация: 10.10.2009
Сообщений: 301
30.10.2010, 11:39  [ТС]
На первой форме вместо MyDataSet я ставлю DataSet в который надо передавать данные и получаю ошибку: "Argument '1': cannot convert from 'RCSoneproduct.KatalogPlanDataSet9' to 'RCSoneproduct.KatalogPlanDataSet4' " (Dataset4 это на форме 2 в котором есть данные, Dataset9 на форме 1 в который передаю данные)

C#
1
2
Form2 f=new Form2(MyDataSet);//передаешь текущий датасет
f.ShowDialog();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2010, 11:39
Помогаю со студенческими работами здесь

При обновлении сводной таблицы в Excel он изменяет форматирование
У меня сводная таблица довольно велика. При необходимости обновления сводной таблицы в Excel он изменяет форматирование теряет все цвета...

Автоматическое заполнение таблицы при обновлении поля штрихкода
Здравствуйте, Прошу помочь начинающему программисту :) Суть такая, я сделал базу с формами в которой 2 таблицы взаимосвязаны по...

Зависание приложения при обновлении таблицы циклом по полям субформы
Здравствуйте. В БД на аксесс 2013+SQL Server есть таблица ПремияПоВсемОбъектам(Код - ключевое, счетчик;ТабНомер-числовой; Объект -...

Грамотная Блокировка записи при конкурентном обновлении таблицы Firebird
Здравствуйте уважаемые Форумчане. Паша первым открыл форму следом за ним Даша и начали править данные... Один из них сохраняет...

Ошибка при обновлении данных в БД из DataGridView при определенном условии
Собственно проблема в следующем... в приложение добавил обновление БД из dgv. Сделано по примеру, как в видео _sB0A6FIhUM На...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru