2010-11-22 11 views
1

私はいくつかの行を削除した後、次のエラーがあります。ADO.NETのDataAdapter

REFERENCE制約「FK_Eleve_Classe」と競合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

sig – kite

答えて

0

あなたはトリガーを持っていますか?これがそのようなエラーの通常の原因です。

eleveがクラスの子行を持つ子表である場合(たとえば、クラス内の各行に対してeleveの行が0から数多くある場合)、このエラーは発生しません。 FKが間違っていない限り、

BTW:カスケードは親から子までです。

+0

の編集を参照してください私はすべてのトリガーを設定していないプライマリ/外部キーを持つ私のテーブル – kite

+0

@ kite:あなたのFK方向をダブルチェックしてください... – gbn

+0

ちょうど2つのテーブルのSQLとFK – kite