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

问题描述 投票:0回答:1

我的表格1

MYCode(withError)

MYForm2

假设我有两张表,为了简单起见(真实的数据库有更多的表,就像图片暗示的那样);两个主键都是自动增量不允许有空值,外键允许有空值。我需要理解一个基本概念。

有一张表叫customers,有以下几列。

  • customer_id (pk)
  • 名称
  • 电话

第二个表叫做订单。

  • order_id (pk)
  • 客户ID (fk)
  • 产品
  • 数量

有一个新客户的订单表格,你必须输入客户信息(姓名,电话)和订单信息(产品,数量)。我在表格上为这些信息做了文本框和一个按钮。

我如何将这些信息插入到正确的表格中,同时确保完成后键值匹配?我想让表单添加客户信息并将订单与他们联系起来。

我已经尝试了表适配器,看了Youtube,写了SQL查询,甚至在服务器资源管理器中手动输入数据。我可以很容易地检索数据,但由于键和自动增量的原因,插入数据时让我感到困惑。我想我缺少一个基本概念。似乎教程几乎从来没有展示过将数据插入到多个表中?我是否需要在表适配器查询中使用触发器或作用域标识?

sql visual-studio foreign-keys primary-key tableadapter
1个回答
0
投票

你的数据集代表了你的数据库表;你用数据填充数据集的表,然后按照正确的顺序调用update(你必须先把东西插入到order和product中,然后才能插入到orderitems中)。

如果你是在现代版本的VS中做这件事,你的数据集也会生成一个TableAdapterManager,这个设备知道集合中所有的tableadapters,以及它们应该被使用的顺序,以实现正确的功能,所以做插入就像调用 tableAdapterManager.UpdateAll(),tableAdapterManager是TableAdapterManager类的一个实例。

有大量的信息需要传递给你才能真正回答你的问题,而且我看不到代码,所以我不能告诉你到目前为止你是如何安排的,但从本质上讲,你要么需要你的订单和产品表中已经有数据(从db下载),要么需要在创建订单时插入行。从逻辑上讲,我认为产品是已知的。我也不知道你用的是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)

如果你没有经理,你必须自己按照正确的顺序把行插入到db中。

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)
© www.soinside.com 2019 - 2024. All rights reserved.