2010-11-22 5 views
1

일부 행을 삭제 한 후, 내 데이터 어댑터에 업데이트 메서드를 호출 할 때 나는 다음과 같은 오류가 있습니다 참조 제약 조건 "FK_Eleve_Classe"와 충돌ADO.NET 데이터 어댑터

DELETE 문을. 데이터베이스 "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를 설정해야합니까?


그래, 호그와트 난에이 재미있는 방법을 설명하는 샘플을 만들고있어 이후)

감사합니다,

+0

'hogwarts' 데이터베이스, lol – hunter

+0

SQL을 게시 할 수 있습니까? – hunter

+0

sql – kite

답변

0

연 당신은 트리거를 가지고 있습니까? 이것이 그러한 오류의 일반적인 원인입니다.

eleve가 자식 행 클래스 (예 : classe의 각 행에 대해 eleve의 행이 0 개) 인 하위 테이블 인 경우이 오류가 발생하지 않아야합니다. FK가 틀린 방법이 아닌 한

BTW : 캐스케이드는 부모에서 자식까지입니다.

+0

에 대한 편집보기 기본/외래 키가있는 내 테이블 – kite

+0

@kite : 트리거를 설정하지 않았습니다. FK 방향을 다시 확인하십시오 ... – gbn

+0

방금 ​​두 테이블의 SQL과 FK 용 SQL을 게시했습니다. – kite