删除一些行后,在我的 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 吗?
是的,霍格沃茨,因为我正在制作一个样本以一种有趣的方式来解释它;)
谢谢,
风筝