如何清除所有外键引用,以便将主键记录的删除保存到数据库中?

本文关键字:记录 删除 保存 数据库 清除 何清除 引用 | 更新日期: 2023-09-27 18:18:07

当我对主键记录执行删除时,它删除外键记录并保存更改,但是当它删除主键记录时,它不让我将主键记录的删除保存到数据库中。相反,它给出以下错误:

错误:不能删除主键值,因为对该键的引用仍然存在。[>外键约束名称= FK_PERSONID]

根据我在网上看到的,我应该能够通过代码或通过数据集设计器视图禁用强制约束。通过代码失败后,我尝试在数据集设计器视图中将enforcecconstraints更改为False。它仍然给出相同的误差。我尝试编辑外键约束来执行级联删除,但它仍然给出相同的错误。尝试仅使用级联删除而不使用代码执行此操作会得到相同的错误。这是我执行删除的部分。

    bizDocStartupDBDataSet1.EnforceConstraints = false;
    BizDocStartupDBDataSet1.EmployeeTitlesRow oldEmployeeTitlesRow;
    oldEmployeeTitlesRow = bizDocStartupDBDataSet1.EmployeeTitles.FindByPERSONIDCOMPANYID(currentPersonID,1);
    oldEmployeeTitlesRow.Delete();
    this.employeeTitlesTableAdapter.Update(this.bizDocStartupDBDataSet1.EmployeeTitles);
    this.Validate();
    this.employeeTitlesBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.bizDocStartupDBDataSet1);
    this.peopleProfilesBindingSource.RemoveCurrent();
    SaveData();
    bindingNavigatorDeleteItem.Enabled = true;
    bizDocStartupDBDataSet1.EnforceConstraints = true;

SaveData函数只是标准的保存和表的重新填充,但是对数据表的更改不能保存到数据库中,因为仍然有对外键的引用。

我如何清除所有引用后的键与外记录已被删除,以便我可以保存主键记录的删除到数据库?

如何清除所有外键引用,以便将主键记录的删除保存到数据库中?

外键用于防止记录孤立,因此只有在您一开始就不需要外键时,才可以使用它。话虽如此,您必须进行级联删除,从表中包含外键的记录开始,删除该FIRST,然后用主键删除记录。按照目前的方式,您可能需要创建两个数据适配器,但理想情况下,您可以使用存储过程来完成所有这些工作。

如果你有绑定表,请确保你不会从主表中删除记录,除非你不再使用它们。

如果存在另一个表,其中包含您试图删除的记录的前键,则会出现此问题。

删除那些你想删除的记录的外键,然后最后删除你真正想删除的记录。

所以我猜你应该小心你要删除的东西。希望能有所帮助!

最后一个问题:你必须删除所有的外国记录

enforcecconstraints是一个c# DataSet对象的属性。修改此值不会影响数据库的结构或行为。

级联删除是解决问题的一种方法——触发器是另一种方法。但作为一般规则,我认为不应该依赖数据库中的自动删除。我认为最好使用存储过程来管理这个删除,方法是先找到所有依赖项并将它们删除,然后再从主键表中删除。这样,您就可以确切地知道数据库中发生了什么。

我很惊讶,在使用级联删除修改FK后,您仍然得到FK错误。也许你可以把准确的错误和你的更新发布到表格中,这样我们就能更好地掌握发生了什么?