2017-01-02 76 views
3

我正在製作一個基於Access數據庫的WPF項目。 數據庫有兩個表:C#WPF:刪除具有外鍵約束(Access數據庫)的記錄

  • 電影(MovieID:PK,片名,導演等)
  • 演員(actorId來:PK,MovieID:FK,名字,姓氏等)

問題是如果我想刪除一部電影,如果仍有 演員附加到電影中,則會出現錯誤。

我刪除電影代碼:

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.dll中發生System.Data.OleDb.OleDbException 附加信息:由於表'tblActors'包含相關記錄,因此無法刪除或更改記錄。

我該如何做到這一點,如果我點擊「刪除電影」按鈕,電影和各自的演員都被刪除?

回答

2

你可以寫2個查詢 - 一個先刪除演員,然後是電影。

或者,您可以進入Access並編輯關係以「級聯刪除相關記錄」。

爲了達到目的,進入Access,轉到數據庫工具並單擊關係。右鍵單擊從電影到演員的關係箭頭,單擊「編輯關係」,然後您會在其中找到選項。

+1

非常感謝,我改變了在Access中的關係,它的工作原理。 我試圖添加刪除演員查詢刪除電影查詢,但只有第二個正在執行(演員被刪除)。 謝謝! – Jasper