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

Ошибка "Violation of primary key constraint" при update

12.01.2016, 23:06. Просмотров 361. Ответов 2
Метки нет (Все метки)

Написал программку. При нажатии на кнопку "обновить" должна происходить синхронизация между базой данных и DataGrid (посредством метода update), однако такого не происходит, вылезает ошибка. Кто знает, где я промахнулся? (Скриншот ошибка - Вложение1).
C#
1
2
3
4
5
6
7
8
        static public void Seller(SqlConnection connection, DataGrid datagrid)
        {
            dt = new DataTable();
 
            dt = ((DataView)datagrid.ItemsSource).ToTable();
 
            Commands.Seller(connection).Update(dt);
        }
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
    static class Commands
    {
        static public SqlDataAdapter Seller(SqlConnection connection)
        {
            SqlDataAdapter da = new SqlDataAdapter();
 
            SqlCommand sc = new SqlCommand("INSERT INTO Продавец (id, ФИО, контакты) VALUES (@id, @fio, @contacts)", connection);
            sc.Parameters.Add("@id", SqlDbType.Int, 5, "id");
            sc.Parameters.Add("@fio", SqlDbType.VarChar, 50, "ФИО");
            sc.Parameters.Add("@contacts", SqlDbType.VarChar, 20, "контакты");
            da.InsertCommand = sc;
 
            sc = new SqlCommand("UPDATE Продавец SET id = @id, ФИО = @fio, контакты = @contacts WHERE id = @oldID", connection);
            sc.Parameters.Add("@id", SqlDbType.Int, 5, "id");
            sc.Parameters.Add("@fio", SqlDbType.VarChar, 50, "ФИО");
            sc.Parameters.Add("@contacts", SqlDbType.VarChar, 20, "контакты");
            SqlParameter parameter = sc.Parameters.Add("@oldID", SqlDbType.NChar, 5, "id");
            parameter.SourceVersion = DataRowVersion.Original;
            da.UpdateCommand = sc;
 
            sc = new SqlCommand("DELETE FROM Продавец WHERE id = @id", connection);
            parameter = sc.Parameters.Add("@id", SqlDbType.Int, 5, "id");
            parameter.SourceVersion = DataRowVersion.Original;
            da.DeleteCommand = sc;
 
            return da;
        }
    }
0
Миниатюры
Ошибка "Violation of primary key constraint" при update  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2016, 23:06
Ответы с готовыми решениями:

При добавлении записи в БД происходит ошибка "violation of PRIMARY KEY constraint)"
Ребята, тут такая неразбериха, я по идее правильные ввожу данные, но почему то выскакивает данная...

Ошибка при INSERT: "Cannot add or update a child row: a foreign key constraint fails"
Здравствуйте. Задача- есть несколько дата грид вьюшек. в них отображаются данные разных таблиц...

Ошибка в запросе на добавление строки: Violation of PRIMARY KEY constraint
private void button1_Click(object sender, EventArgs e) { SqlConnection con =...

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Main_ToWorker"
Добрый день. Пытаюсь добавить запись в базу данных выдает эту ошибку...

Ошибка при Update "Update requires a valid InsertCommand when passed DataRow collection with new rows"
Доброго времени суток! Я в этом всем новичек и поэтому совсем не могу понять в чем ошибка. В...

2
Igr_ok
435 / 401 / 191
Регистрация: 04.08.2015
Сообщений: 1,098
13.01.2016, 14:35 2
Цитата Сообщение от amasaemi Посмотреть сообщение
dt = ((DataView)datagrid.ItemsSource).ToTable();
Судя по описанию метода
https://msdn.microsoft.com/ru-ru/library/a8ycds2f%28v=vs.110%29.aspx
он возвращает новую таблицу с новыми записями. А т.к. на самом деле записи уже существуют, вы получаете ошибку.
Попробуйте так:
C#
1
dt = (DataTable) datagrid.DataSource;
0
amasaemi
9 / 9 / 5
Регистрация: 22.08.2015
Сообщений: 108
13.01.2016, 16:21  [ТС] 3
Цитата Сообщение от Igr_ok Посмотреть сообщение
Судя по описанию метода
https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx
он возвращает новую таблицу с новыми записями. А т.к. на самом деле записи уже существуют, вы получаете ошибку.
Попробуйте так:
C#Выделить код
1
dt = (DataTable) datagrid.DataSource;
К сожалению у datagrid нету метода DataSource (это wpf'ная табличка DataGrid). Но я так и думал, что ошибка в этой команде. Как теперь ее исправить - не знаю...

Добавлено через 15 минут
Починил. Итак, в чем была ошибка. В строке:
C#
1
dt = ((DataView)datagrid.ItemsSource).ToTable();
надо было приводить не к ToTable, а просто к Table.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2016, 16:21

Добавление данных в таблицу. Нарушение "PK_Adresss" ограничения PRIMARY KEY
Есть контроллер public ActionResult ADDObject(Name add) { Model1Container...

Ошибка "concurrency violation" при записи в таблицу
Уважаемые Гуру! Для чтения и проверки обновления использую следующий отладочный код: ...

Сохранение в БД. (DataAdapter и параметры. Ошибка "Нарушение "IX_Countries" ограничения UNIQUE KEY.")
Всем привет! Пишу курсач и самостоятельно разбираюсь в ado.net. Возникла проблема. В БД есть...


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

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

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