【问题标题】:Deleting columns from multiple table having relationship从具有关系的多个表中删除列
【发布时间】:2014-03-22 01:56:31
【问题描述】:

我正在使用 Gridview 显示数据库中的一些数据并提供删除数据的选项但现在我只是通过外键将主键列引用到另一个表。无论如何要删除,现在删除由于冲突而不起作用。

错误:-DELETE 语句与 REFERENCE 约束冲突 “FK_temp1_ProductDetails”。数据库发生冲突 "E:\VISUAL STUDIO 2010\SHOPMOBILE\APP_DATA\SHOPPING.MDF", 表 “dbo.temp1”,列“product_id”。声明已终止。

无论如何要同时从两个表中删除数据。删除查询是

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConflictDetection="CompareAllValues" 
            ConnectionString="<%$ ConnectionStrings:shoppingConnectionString2 %>" 
            DeleteCommand="DELETE FROM [ProductDetails] WHERE [Product_id] = @original_Product_id" 
            OldValuesParameterFormatString="original_{0}" 
            SelectCommand="SELECT * FROM [ProductDetails]" 
            UpdateCommand="UPDATE [ProductDetails] SET [Product_name] = @Product_name, [Brand] = @Brand, [Category] = @Category, [Sub_category] = @Sub_category, [Product_info] = @Product_info, [Price] = @Price, [Big_img] = @Big_img, [Quantity] = @Quantity WHERE [Product_id] = @original_Product_id">
            <DeleteParameters>
                <asp:Parameter Name="original_Product_id" Type="Int32" />
                <asp:Parameter Name="original_Product_name" Type="String" />
                <asp:Parameter Name="original_Brand" Type="String" />
                <asp:Parameter Name="original_Category" Type="String" />
                <asp:Parameter Name="original_Sub_category" Type="String" />
                <asp:Parameter Name="original_Product_info" Type="String" />
                <asp:Parameter Name="original_Price" Type="Int64" />
                <asp:Parameter Name="original_Big_img" Type="String" />
                <asp:Parameter Name="original_Quantity" Type="Int64" />
            </DeleteParameters>
        </asp:SqlDataSource>

【问题讨论】:

  • 你想做什么?
  • 您必须先删除temp1 中引用ProductDetails 表的记录,然后才能删除ProductDetails 中的记录。以正确的顺序发出单独的命令,或者在 temp1 表的 FK 上启用 CASCADE DELETE。并且请不要在您的项目中留下一个名为 temp1 的表,这对任何使用该名称的人都没有好处。
  • @Borat 我想从 productdetails 表中删除选定的产品,但我喜欢该表到 temp1,所以上面的代码触发错误,因为 temp1 中存在数据

标签: c# asp.net sql-server-2008


【解决方案1】:

在sql server management studio上,选择ProductDetails表设计视图并打开关系窗口,然后将delete action设置为CASCADE DELETE,就可以了。

更新:为所有表关系设置它。

【讨论】:

  • @ALOK 你为所有表关系设置了吗?
  • 好吧好吧,这个列被另一个表Order表进一步引用,这就是它无法删除的原因。感谢@Hadi 为我带来了一些新东西。
  • @ALOK:级联删除要非常小心;你可能会在不知不觉中从你的桌子上删除一些重要的东西。最好在执行删除之前创建一个可以正确验证的存储过程,然后将其用作您的删除命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多