我使用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
”记录并保存起来一切正常我的问题是如何同时插入主记录和子记录?
答案 0 :(得分:0)
您应该使用存储过程同时在两个表中插入
答案 1 :(得分:0)
简而言之,您的代码违反了参照完整性。
根据您的代码示例,我可以看到您正在使用某种框架在数据库中插入记录。我以前使用过的框架也不喜欢这种框架,因为它们希望您先添加主记录,然后再添加明细记录。
在进行进一步操作之前,请问自己为什么要同时添加主要和详细信息,以及是否可以将其分为两个逻辑运算?如果没有,您可以随时编写存储过程并从代码中调用它:
CREATE PROCEDURE sp_<proc_name>
...
BEGIN TRAN
INSERT INTO <master>...
INSERT INTO <detail>...
COMMIT TRAN