2017-01-02 2 views
3

Я делаю проект WPF на основе базы данных Access. База данных содержит две таблицы:C# WPF: удалить запись с ограничениями внешнего ключа (Access db)

  • Фильмы (MovieID: PK, название, директор и т.д.)
  • Актеры (ActorID: PK, MovieID: FK, ПгвЬЫате, Lastname и т.д.)

Проблема заключается в если я хочу удалить фильм, я получаю сообщение об ошибке, если есть еще актеров, прикрепленных к фильму.

Мой код для удаления фильма:

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(); 
} 

Как временно решение я добавил MessageBox, который запрашивает подтверждение, если актеры будут удалены из фильма. Но если они не являются, и вы нажимаете да, это происходит:

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 запроса - сначала удалить актеров, потом фильм.

Или вы можете перейти в Access и отредактировать отношение к «Cascade Delete Related Records».

Чтобы попасть туда, перейдите в раздел «Доступ», перейдите в «Инструменты базы данных» и нажмите «Отношения». Щелкните правой кнопкой мыши стрелку отношений от фильмов к актерам, нажмите «Изменить отношения», и вы найдете там варианты.

+1

Большое спасибо, я изменил отношения в Access, и он работает. Я пытался добавить запрос на удаление объекта в запрос на удаление видео, но затем исполнялся только второй (удаляются участники). Спасибо! – Jasper

Смежные вопросы