如何使用匹配键同时插入客户和订单信息

How to insert customer and order info at same time with matching keys

MyForm1

MYCode(withError)

MYForm2

为了简单起见,假设我有两个 table(真实数据库有更多 table,如图所示);两个主键都是自增不允许为空,外键允许为空。我需要了解一个基本概念:

一个table叫客户,有以下列:

第二个table调用命令:

有一个新客户的订单表,您必须在其中输入客户信息(姓名,phone)和订单信息(产品、数量)。我在表单和按钮上为这些制作了文本框。

如何将此信息插入正确的 table 中,同时确保完成后密钥匹配?我想要表格添加客户信息并将订单绑定到他们。

我尝试了 table 适配器,观看了 Youtube,编写了 SQL 查询,甚至在服务器资源管理器中手动输入了数据。我可以轻松检索数据,但由于键和自动递增,插入让我感到困惑。我想我缺少一个基本概念。似乎教程几乎从不显示将数据插入多个 tables ?我的 table 适配器查询中是否需要触发器或范围标识?

您的数据集代表您的数据库表;你用数据填充数据集的表,然后以正确的顺序调用更新(你必须先将东西插入到订单和产品中,然后才能插入到 orderitems 中)

如果您在现代版本的 VS 中执行此操作,您的数据集还将生成一个 TableAdapterManager,该设备知道集合中的所有表适配器以及它们应该用于实现正确功能的顺序,因此这样做插入就像调用 tableAdapterManager.UpdateAll() 一样简单,tableAdapterManager 是 TableAdapterManager class

的一个实例

需要传递给您大量信息才能真正回答您的问题,我看不到代码,所以我无法判断您到目前为止是如何安排的,但本质上您要么需要您的 Orders 和 Products 表中已经有数据(从数据库下载),要么需要在创建订单时插入行。从逻辑上讲,我会假设产品是已知的。我也不知道您使用的是 VB 还是 C# - 我会写成 VB,因为 C# 程序员可能不太可能抱怨必须在脑子里翻译 VB 反之亦然:

   Dim prodToAdd = ds.Products.Find(1234) 'gets a row from the product table with id 1234

   'create an order
   Dim order = ds.Orders.NewOrdersRow()
   order.Address = "Whatever" 'set properties of the order
   ds.Orders.Add(order) 'put the new row in the local datatable, not saved to db yet

   'put a product on an order
   ds.OrderItems.AddOrderItemsRow(prodToAdd, order, ...) 'directly add an orderitem row linking the Product and the Order

   'save to db
   tableAdapterManager.UpdateAll(ds)

如果您没有经理,您必须自己以正确的顺序将行插入数据库:

ordersTableAdapter.Update(ds.Orders) 'yes, the method is called update, but it runs an INSERT sql for rows in an Added rowstate

orderItemsTableAdater.Update(ds.OrderItems)