2017-01-02 11 views
3

私はAccessデータベースに基づいてWPFプロジェクトを作成しています。C#WPF:外部キー制約のあるレコードを削除する(Access db)

  • 映画(MOVIEID::PK、タイトル、ディレクターなど)
  • 俳優(アクターID:PK、MOVIEID:FK、ファーストネーム、姓など)

問題がある データベースには、2つのテーブルを持っています映画を削除したい場合は、まだ映画に 人の俳優がついていればエラーになります。映画を削除するための

マイコード:私は俳優が映画から削除された場合に確認のメッセージが表示されますメッセージボックスを追加しました一時的な解決策として

public static void DeleteMovie(Movie mov) 
{ 
     string commandString = string.Format("DELETE FROM tblMovies WHERE MovieID = {0}", mov.MovieID); 

     OleDbConnection conn = new OleDbConnection(connectionString); 
     OleDbCommand command = new OleDbCommand(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter(); 
     conn.Open(); 

     command.Connection = conn; 
     command.CommandText = commandString; 
     adapter.DeleteCommand = command; 
     adapter.DeleteCommand.ExecuteNonQuery(); 
     conn.Close(); 
} 

。そうでないと、あなたがクリックした場合しかし、はい、これは起こる:

Movie mov = (Movie)listBoxMovies.SelectedItem; 
MovieRepository.DeleteMovie(mov); 
MessageBox.Show("The movie: '" + mov.Title + " 'has been deleted."); 

私は同じMOVIEIDと俳優を持っているムービーを削除したい取得エラー:

タイプの未処理の例外'System.Data.OleDb.OleDbException'がSystem.Data.dllで発生しました 追加情報: 'tblActors'テーブルに関連レコードが含まれているため、レコードを削除または変更できません。

「ムービーを削除」ボタンをクリックすると、ムービーとそれぞれのアクターの両方が削除されるようにするにはどうすればよいですか?

答えて

2

2つのクエリを書き込むことができます.1つはアクタを最初に削除し、その後はムービーを削除します。

また、「カスケード関連レコードを削除」の関係をアクセスして編集することもできます。

アクセスするには、[データベースツール]の[関係]をクリックします。映画から俳優までの関係矢印を右クリックし、「関係の編集」をクリックすると、そこにオプションが表示されます。

+1

ありがとう、私はアクセスの関係を変更し、それが動作します。 私はdelete movieクエリにdeleteアクタークエリを追加しようとしていましたが、2番目のものだけが実行されていました(アクターが削除されています)。 ありがとうございます! – Jasper

関連する問題