Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511

Ошибка при обновлении бд из dataSet

27.11.2011, 18:17. Показов 1720. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Делаю прогу и имею следующие грабли:
открываю справочник->предметы,
удаляю "Химия",
нажимаю "Sql Server->сохранить изменения"
и вылетает exception:
Конфликт инструкции DELETE с ограничением REFERENCE "FK_SchoolPlan_Subjects". Конфликт произошел в базе данных "SCHOOL", таблица "dbo.SchoolPlan", column 'SubjectID'.
Выполнение данной инструкции было прервано.
Не могу найти в чем причина.Может не правильно задал связи в DataSet или нужно вручную настроить
команды в DataAdapter ? Выкладываю прогу(c# 2008 express) и бд(sqlserver 2008 express).
Заранее спасибо!
Миниатюры
Ошибка при обновлении бд из dataSet   Ошибка при обновлении бд из dataSet  
Вложения
Тип файла: zip School.zip (128.4 Кб, 10 просмотров)
Тип файла: zip бд.zip (231.7 Кб, 9 просмотров)
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2011, 18:17
Ответы с готовыми решениями:

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

Ошибка при обновлении datagridview
Здравствуйте! Такая проблема! Есть datagrid. Первый раз, когда я выполняю запрос все работает нормально: данные приходят, красятся в...

Ошибка синтаксиса при обновлении БД
Столкнулся с проблемой обновления БД. Общий принцип обновления взят мной из ранних моих проектов(они работают по сей день и без проблем). А...

2
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
28.11.2011, 00:35  [ТС]
Лучший ответ Сообщение было отмечено ][irurg как решение

Решение

Вроде разобрался. В бд с помощью sql Management studio в отношения между таблицами задал правила обновления и удаления "каскадно" и подправил код
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data;
using System.Windows.Forms;
 
namespace School
{
    class DAL
    {
        string connectionString = @"Data Source = .\SQLExpress;Initial Catalog = School;Integrated Security = true";
 
        SqlDataAdapter subjectsDA;
        SqlDataAdapter teacherDA;
        SqlDataAdapter classesDA;
        SqlDataAdapter auditoryDA;
        SqlDataAdapter schoolPlanDA;
 
        SqlCommandBuilder subjectsCB;
        SqlCommandBuilder teacherCB;
        SqlCommandBuilder classesCB;
        SqlCommandBuilder auditoryCB;
        SqlCommandBuilder schoolPlanCB;
 
        void LoadAll()
        {            
            subjectsDA.Fill(SchoolDataSet, "Subjects");
            teacherDA.Fill(SchoolDataSet, "Teacher");
            classesDA.Fill(SchoolDataSet, "Class");
            auditoryDA.Fill(SchoolDataSet, "Auditory");
            schoolPlanDA.Fill(SchoolDataSet, "SchoolPlan");
        }
 
        public void SaveAll()
        {
            subjectsDA.Update(SchoolDataSet.Tables["Subjects"]);
            teacherDA.Update(SchoolDataSet.Tables["Teacher"]);
            classesDA.Update(SchoolDataSet.Tables["Class"]);
            auditoryDA.Update(SchoolDataSet.Tables["Auditory"]);
            schoolPlanDA.Update(SchoolDataSet.Tables["SchoolPlan"]);
        }
 
        public DataSet SchoolDataSet{get;private set;}
 
        public DAL()
        {
            SchoolDataSet = new DataSet();
 
            subjectsDA = new SqlDataAdapter("Select * From Subjects", connectionString);
            subjectsCB = new SqlCommandBuilder(subjectsDA);
             
            teacherDA = new SqlDataAdapter("Select * From Teacher", connectionString);
            teacherCB = new SqlCommandBuilder(teacherDA);
 
            classesDA = new SqlDataAdapter("Select * From Class", connectionString);
            classesCB = new SqlCommandBuilder(classesDA);
 
            auditoryDA = new SqlDataAdapter("Select * From Auditory", connectionString);
            auditoryCB = new SqlCommandBuilder(auditoryDA);
 
            schoolPlanDA = new SqlDataAdapter("Select * From SchoolPlan", connectionString);
            schoolPlanCB = new SqlCommandBuilder(schoolPlanDA);
 
            LoadAll();
 
            SchoolDataSet.Tables["Subjects"].Columns["Subject"].Unique = true;
            SchoolDataSet.Tables["Subjects"].PrimaryKey = new DataColumn[] { SchoolDataSet.Tables["Subjects"].Columns["ID"] };            
            ForeignKeyConstraint fk = new ForeignKeyConstraint("FKSubjectSchoolPlan", SchoolDataSet.Tables["Subjects"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["SubjectID"]);
            fk.AcceptRejectRule = AcceptRejectRule.Cascade;
            fk.UpdateRule = Rule.Cascade;
            fk.DeleteRule = Rule.Cascade;
            SchoolDataSet.Tables["SchoolPlan"].Constraints.Add(fk);
            SchoolDataSet.Relations.Add(new DataRelation("SubjectSchoolPlan", SchoolDataSet.Tables["Subjects"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["SubjectID"]));
             
 
            SchoolDataSet.Tables["Teacher"].Columns["Teacher"].Unique = true;
            SchoolDataSet.Tables["Teacher"].PrimaryKey = new DataColumn[] { SchoolDataSet.Tables["Teacher"].Columns["ID"] };
            fk = new ForeignKeyConstraint("FKTeacherSchoolPlan", SchoolDataSet.Tables["Teacher"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["TeacherID"]);
            fk.UpdateRule = Rule.Cascade;
            fk.DeleteRule = Rule.Cascade;
            SchoolDataSet.Tables["SchoolPlan"].Constraints.Add(fk);
            SchoolDataSet.Relations.Add(new DataRelation("TeacherSchoolPlan", SchoolDataSet.Tables["Teacher"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["TeacherID"]));
 
            SchoolDataSet.Tables["Class"].Columns["Class"].Unique = true;
            SchoolDataSet.Tables["Class"].PrimaryKey = new DataColumn[] { SchoolDataSet.Tables["Class"].Columns["ID"] };
            fk = new ForeignKeyConstraint("FKClassSchoolPlan", SchoolDataSet.Tables["Class"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["ClassID"]);
            fk.UpdateRule = Rule.Cascade;
            fk.DeleteRule = Rule.Cascade;
            SchoolDataSet.Tables["SchoolPlan"].Constraints.Add(fk); 
            SchoolDataSet.Relations.Add(new DataRelation("ClassSchoolPlan", SchoolDataSet.Tables["Class"].Columns["ID"], SchoolDataSet.Tables["SchoolPlan"].Columns["ClassID"]));
 
            SchoolDataSet.Tables["Auditory"].Columns["Auditory"].Unique = true;
            SchoolDataSet.Tables["Auditory"].PrimaryKey = new DataColumn[] { SchoolDataSet.Tables["Auditory"].Columns["ID"] };
             
            SchoolDataSet.Tables["SchoolPlan"].PrimaryKey = new DataColumn[] { SchoolDataSet.Tables["SchoolPlan"].Columns["ID"] };
            UniqueConstraint uc = new UniqueConstraint(new DataColumn[]{SchoolDataSet.Tables["SchoolPlan"].Columns["SubjectID"], SchoolDataSet.Tables["SchoolPlan"].Columns["TeacherID"], SchoolDataSet.Tables["SchoolPlan"].Columns["ClassID"]});
            SchoolDataSet.Tables["SchoolPlan"].Constraints.Add(uc);
        
        }                   
    }
}
1
q12357
13.01.2013, 13:06
Спасибо, очень помогло.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2013, 13:06
Помогаю со студенческими работами здесь

Ошибка при обновлении данных в БД MySQL
Доброго времени суток! Ни как не могу понять в чём ошибка, она выпадает когда данные уже введены в таблицу и после нажатия кнопки,...

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

Ошибка при выборе, изменении, удалении и обновлении записей в БД
Не работают кнопки, ошибки каждой приведены ниже на скриншотах. привожу код программы и проект в целом (см.архив) помогите исправить...

Ошибка при обновлении : "Ошибка синтаксиса в инструкции INSERT INTO."
Ошибка при обновлении : "Ошибка синтаксиса в инструкции INSERT INTO." OleDbConnection connect = new...

Добавление строки в DataSet: Ошибка при указнии конкретных столбцов
Добрый вечер! такая загвоздочка: Задача кода получить список полей таблицы и засунуть его в dataset для дальнейшего использования....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru