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

Конфликт инструкции INSERT с ограничением Foreign Key

07.12.2015, 20:49. Просмотров 4349. Ответов 2
Метки нет (Все метки)

Здравствуйте! В БД есть таблица, в которой содержатся внешние ключи с разрешенным значением NULL. Для добавления данных используется хранимая процедура:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE PROC NewRepair
@IDRepair INT,
@RepType INT,
@Description VARCHAR(50),
@DateStart datetime = NULL,
@DateFinish datetime = NULL,
@ID_Appl INT = NULL,
@ID_Equip INT = NULL
 
AS
IF NOT EXISTS (SELECT * FROM Ремонт WHERE ID_Ремонт=@IDRepair)
BEGIN  
INSERT INTO Ремонт                      
VALUES (@IDRepair, @RepType, @DateStart, @DateFinish,  @ID_Appl, @ID_Equip, @Description)
END
В SQL Server-е все работает отлично, но при попытке добавить данные, которые содержат пустые значения внешних ключей через приложение в Visual Studio выскакивает ошибка "Конфликт инструкции INSERT с ограничением FOREIGN KEY "требует". Конфликт произошел в базе данных "MedEquipment", таблица "dbo.Заявка".Выполнение данной инструкции было прервано."

Код для добавления данных в VS:
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
 private void btn_AddRepair_Click(object sender, EventArgs e)
        {
                SqlCommand com = new SqlCommand("NewRepair", con);
                com.CommandType = CommandType.StoredProcedure;
 
                com.Parameters.AddWithValue("@IDRepair", txb_IdRepair.Text);
                com.Parameters.AddWithValue("@RepType", cmb_type.SelectedValue);
                com.Parameters.AddWithValue("@Descriprion", txb_descript.Text);
                com.Parameters.AddWithValue("@DateStart", dtp_start.Value);
                com.Parameters.AddWithValue("@DateFinish", dtp_finish.Value);
                com.Parameters.AddWithValue("@ID_Appl", txb_IdApp.Text);
                com.Parameters.AddWithValue("@ID_Equip", txb_IdEquip.Text);
                                
                try
                {    
                con.Open();
                
                com.ExecuteNonQuery();
                DialogResult = DialogResult.OK;
                MessageBox.Show("Данные добавлены!");
 
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка добавления данных!" + ex.Message);
                    return;
                }
                con.Close();
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2015, 20:49
Ответы с готовыми решениями:

Конфликт инструкции INSERT с ограничением FOREIGN KEY
вот код using System; using System.Collections.Generic; using System.ComponentModel; using...

Конфликт инструкции INSERT с ограничением FOREIGN KEY
Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK_komnaty_klienty". Конфликт произошел в...

Ошибка при INSERT. Нарушение FOREIGN KEY constraint.
Выползает вот такая ошибка: System.Data.SqlClient.SqlException: The INSERT statement conflicted...

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

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

2
kolorotur
Эксперт .NET
11322 / 9212 / 2341
Регистрация: 17.09.2011
Сообщений: 15,835
Завершенные тесты: 1
07.12.2015, 23:12 2
Цитата Сообщение от Tschuss Посмотреть сообщение
C#
1
2
3
4
5
6
7
                com.Parameters.AddWithValue("@IDRepair", txb_IdRepair.Text);
                com.Parameters.AddWithValue("@RepType", cmb_type.SelectedValue);
                com.Parameters.AddWithValue("@Descriprion", txb_descript.Text);
                com.Parameters.AddWithValue("@DateStart", dtp_start.Value);
                com.Parameters.AddWithValue("@DateFinish", dtp_finish.Value);
                com.Parameters.AddWithValue("@ID_Appl", txb_IdApp.Text);
                com.Parameters.AddWithValue("@ID_Equip", txb_IdEquip.Text);
Насколько я понимаю, внешние ключи — это последние два параметра.
Дело тут в том, что если в текстовом поле ничего не прописано, то значение свойства Text не NULL, а строка длиной 0 символов, то есть пустая. Так что вы пытаетесь записать в таблицу не NULL, а строку длиной 0 символов.

Как в шарпе, так и в базе, null и пустая строка — две разные вещи.

Попробуйте такой вариант:
C#
1
2
3
4
5
int idApp;
if (int.TryParse(txb_IdApp.Text, out idApp))
   com.Parameters.AddWithValue("@ID_Appl", idApp);
else
   com.Parameters.AddWithValue("@ID_Appl", null);
То же самое и для второго ключа.
1
Tschuss
5 / 5 / 2
Регистрация: 15.11.2015
Сообщений: 16
08.12.2015, 09:56  [ТС] 3
kolorotur, спасибо огромное, очень помогли, все работает!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2015, 09:56

foreign key (C#+SQL)
Здравствуйте. Ситуация такая. Два формы. Form1 и Form2. С Form1 данные заполняют таблицу Table1....

Добавить данные в таблицу с Foreign Key
Проблема в следующем, не могу понять, как добавлять данные в таблицу в которой есть Foreign key. В...

Как заполнить колонку listview по foreign key?
Интересует способ выводить название отдела (departments.name) по foreign key (DepartmentsId)...


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

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

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