【问题标题】:VB.Net - Delete First Row Data in DataGridViewVB.Net - 删除 DataGridView 中的第一行数据
【发布时间】:2014-07-29 09:41:29
【问题描述】:

美好的一天。 我是 VB.net 和 SQL 的新手。
现在我在 vb.net 中使用 datagridview,当我尝试删除表中第一行的数据时遇到错误。

DELETE 语句与 REFERENCE 约束“FK_Sales_CustomerList”冲突。冲突发生在数据库“BestSmileShop”、表“dbo.Sales”、列“custID”中。

这是我的代码:

Dim dt As DataTable
Dim dr As DataRow
cid = txtCid.Text
dt = DsCust1.Tables("CustomerList")
dr = dt.Rows.Find(cid)
dr.Delete()

有人知道吗?可以给我解释一下问题吗?谢谢:)
对不起我的英语不好。

【问题讨论】:

    标签: sql-server vb.net datagridview ado.net


    【解决方案1】:

    请向我们展示您的数据库架构。 发生错误是因为您的数据库有一个名为“Sales”的表,它引用了“CustomerList”表。有一些东西被卖给了 CustomerList 上的一个客户(我从名字上猜到了)。这是通过列 Sales.custID 完成的,该列称为外键 (FK)。当您尝试删除客户时,这是不可能的,因为 FK 告诉 SQL 不应删除客户,除非没有引用他/她的销售。 如果您考虑一下,这是合乎逻辑的 - 如果您删除客户,您将永远不知道某件商品卖给了谁,这实际上是在数据中创建了一个黑洞。

    你应该用谷歌搜索的东西:

    • 外键
    • 数据库设计
    • 实体框架 - 这比直接使用数据库更现代,而且您可以轻松地将对象映射到数据库数据。

    【讨论】:

    • 感谢您愿意帮助我:) 在我删除从CustomerList 表到Sales 表的所有引用后,delete 函数再次运行良好。我会仔细研究你推荐我研究的东西。
    • @VillagerA 如果可以在 Visual Studio Server Explorer 中打开数据库,请尝试查看 Sales 的定义。左侧应该有一个所有外键的列表
    • 防止删除是外键的一部分。您确定要删除此引用吗?而是考虑使用某种对象结构,例如 CSLA.NET,它实现了事务边界。然后你可以删除那些可以删除的行,留下那些不能删除的行。否则你最终会得到孤立的记录。
    • @JonathonCowley-Thom 你是对的。我只想清除数据库中的所有数据以对我的应用程序进行测试,但系统不允许我这样做。
    【解决方案2】:

    您尝试删除的记录在“Sales”表中被引用(通过外键)。

    为了从 CustomerList 表中删除,您还需要删除 Sales 表中对该客户的所有引用。

    【讨论】:

    • 是的,你是对的。我刚刚删除了它们,delete 函数运行良好。感谢您愿意提供帮助:)
    • 我不认为这是解决问题,而只是回避它。这里的问题很简单,您正在尝试删除您可能不应该删除的内容。实施该外键是有原因的。
    • 我的建议是在干净、无数据的数据库上进行测试。 SQL Server 可以生成一个脚本,该脚本本质上是复制数据库的架构而不复制其数据,并且可用于创建新副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多