ADO.NET DataAdapter - PullRequest
       17

ADO.NET DataAdapter

1 голос
/ 22 ноября 2010

У меня возникает следующая ошибка при вызове метода update в моем dataAdapter после удаления некоторых строк:

Оператор DELETE конфликтует с ограничением REFERENCE "FK_Eleve_Classe". Конфликт произошел в базе данных "hogwarts", таблице "dbo.Eleve", столбце "FK_classID". Заявление было прекращено.

Действительно, определен внешний ключ, но поскольку первичный ключ находится в таблице "classe", почему он не позволяет мне удалить строку в "eleve"?

Может быть, он пытается удалить в каскаде? (тогда как это изменить?)

изменить 1: SQL

CREATE TABLE [dbo].[Classe](
    [id] [int] NOT NULL,
 CONSTRAINT [PK_Classe] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


CREATE TABLE [dbo].[Eleve](
    [id] [int] NOT NULL,
    [nom] [varchar](50) NULL,
    [prenom] [varchar](50) NULL,
    [birthdate] [date] NULL,
    [FK_classID] [int] NULL,
 CONSTRAINT [PK_Eleve] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]



ALTER TABLE [dbo].[Eleve]  WITH CHECK ADD  CONSTRAINT [FK_Eleve_Classe] FOREIGN KEY([FK_classID])
REFERENCES [dbo].[Classe] ([id])

Редактировать 2: некоторый код c #

 DataSet ds = new DataSet();

 c.Open(); // SqlConnection


 SqlDataAdapter da = new SqlDataAdapter("Select * from eleve", (SqlConnection)c);
 da.Fill(ds, "eleves");
 da.SelectCommand = new SqlCommand("select * from cours", (SqlConnection)c);
 da.Fill(ds, "COURS");
 da.SelectCommand = new SqlCommand("select * from professeur", (SqlConnection)c);
 da.Fill(ds, "PROF");
 da.SelectCommand = new SqlCommand("select * from classe", (SqlConnection)c);
 da.Fill(ds, "CLASSE");
 c.Close();


 ds.Tables["eleves"].Rows[0].Delete();

редактировать 3: удаление

вот как я удаляю свой элемент из моей таблицы:

ds.Tables["eleves"].Rows[0].Delete();

в дополнение к этому я должен установить deleteCommand вручную?


и да, Хогвартс, так как я делаю образец, чтобы объяснить это забавным образом;)

Спасибо,

Kite

1 Ответ

0 голосов
/ 22 ноября 2010

У вас есть триггер?Это обычная причина таких ошибок.

Если eleve является дочерней таблицей с дочерними строками классов (например, от 0 до множества строк в eleve для каждой строки в classe), то этой ошибки быть не должно.Если FK не является неправильным способом

Кстати: каскад от родителя к ребенку.

...