【问题标题】:Delete Access record that has foreign key constraint删除具有外键约束的访问记录
【发布时间】:2017-01-02 00:19:37
【问题描述】:

我正在制作一个基于 Access 数据库的 WPF 项目。 该数据库有两个表:

  • 电影(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' 包含相关记录。

我怎样才能做到,如果我点击“删除电影”按钮,电影和相应的演员都会被删除?

【问题讨论】:

    标签: c# wpf ms-access


    【解决方案1】:

    您可以编写 2 个查询 - 一个先删除演员,然后是电影。

    或者,您可以进入 Access 并编辑与“级联删除相关记录”的关系。

    要到达那里,请进入 Access,进入数据库工具并单击关系。右键单击从 Movies 到 Actors 的关系箭头,单击“Edit Relationship”,您将在此处找到选项。

    【讨论】:

    • 非常感谢,我在Access中更改了关系,它可以工作了。我试图将删除演员查询添加到删除电影查询中,但只有第二个正在执行(演员被删除)。谢谢!
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多