在同一期中插入2个主要明细记录

时间:2019-05-19 12:24:04

标签: .net sql-server winforms dataset bindingsource

我使用2个相关表在Windows窗体应用程序中同时插入主详细记录,这些表称为“ Orders”和“ Order Details”。

  • 我首先创建一个名为“ dataSet1”的数据集并创建行表 这两个表的适配器
  • 然后,我在设计模式下打开表单,然后从数据源窗口中删除 首先在“ Orders”表中删除相关的“ Order Details” 创建主详细信息界面的表格,
  • 因此主记录是“ Orders”记录,该记录显示为 表单和详细记录“ Order Details”显示为datadridview fields
  • 将逻辑代码保存在“ ordersBindingNavigatorSaveItem”按钮中 自动创建的bindingnavigator就像:

        this.Validate();
        this.ordersBindingSource.EndEdit();
        this.tableAdapterManager.UpdateAll(this.dataSet1);
    
  • 然后在我插入“ Order”记录时以及在将其保存到数据库之前 我创建了至少一个孩子“ Order Details”记录,然后调用 保存上面显示的代码以在我得到的同时保存所有内容 错误,例如:

  

INSERT语句与FOREIGN KEY约束冲突   “ FK_Order_Details_Orders”。数据库中发生了冲突   “ Northwind”,表“ dbo.Orders”,列“ OrderID”。该声明有   已终止。

  • 但是当我插入“订单”记录并将其保存到数据库时,我 插入“ Order Details”记录并保存起来一切正常

我的问题是如何同时插入主记录和子记录?

2 个答案:

答案 0 :(得分:0)

您应该使用存储过程同时在两个表中插入

答案 1 :(得分:0)

简而言之,您的代码违反了参照完整性。

根据您的代码示例,我可以看到您正在使用某种框架在数据库中插入记录。我以前使用过的框架也不喜欢这种框架,因为它们希望您先添加主记录,然后再添加明细记录。

在进行进一步操作之前,请问自己为什么要同时添加主要和详细信息,以及是否可以将其分为两个逻辑运算?如果没有,您可以随时编写存储过程并从代码中调用它:

CREATE PROCEDURE sp_<proc_name>
...
BEGIN TRAN
INSERT INTO <master>...
INSERT INTO <detail>...
COMMIT TRAN