2010-11-22 70 views
1

我有以下错误,当我呼吁我的DataAdapter的更新方法,删除某些行后:ADO.NET的DataAdapter

DELETE语句冲突与基准约束“FK_Eleve_Classe”。冲突发生在数据库“hogwarts”,表“dbo.Eleve”,列“FK_classID”中。 该声明已被终止。

事实上,定义了一个外键,但由于主键在“类”表中,为什么它不允许我在“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吗?


是的,霍格沃茨因为我拍样片来解释这一个有趣的方式;)

感谢,

风筝

+0

`hogwarts`数据库,大声笑 – hunter 2010-11-22 18:23:29

+0

你可以发布你的SQL吗? – hunter 2010-11-22 18:24:39

回答

0

你有一个触发器?这是这种错误的常见原因。

如果eleve是一个带有子行类的子表(例如,对于类中的每行都有0到多行),那么这个错误不应该发生。除非FK是错误的方式

顺便说一句:级联是从父母到孩子。