打字数据集;父/子选择和更新一次数据库(每个操作)?

时间:2013-09-25 22:29:20

标签: visual-studio visual-studio-2012 ado.net strongly-typed-dataset

是否有可能使用包含父/子关系中的两个表的ADO.NET类型化DataSet来填充数据集,其中包含一行到d / b(查询可以返回一个或两个表;如果是,则返回结果set有来自两个表的列,对吗?),并用d / b更新d / b(我猜是调用生成的存储过程)。

通过“是否可能”,我的意思是可以让Visual Studio(2012)自动生成类和SQL代码来实现这一目标吗?

还是我自己呢?它看起来非常像VS真的想为每个表生成一个d / b服务器往返。

*我想更新存储过程必须从父项和子项中获取表类型参数,并相应地执行插入/更新/删除。

1 个答案:

答案 0 :(得分:1)

是的,每桌一次往返是要走的路。  ( - 当然可以使用连接查询来填充数据表,但VS将不愿意生成更新等SQL。这可能是也可能不是问题,这取决于您打算如何处理数据集。) 但是,如果数据集中有两个表,可以说客户 - 订单,那么通常会使用两个查询,并且两次访问数据库:

SELECT * FROM customers WHERE customers.customerid =@customerid

和 SELECT * FROM orders WHERE orders.customerid =@customerid

如果你想要一个国家的所有客户和订单,那么更直观的是:

SELECT * FROM customers WHERE customers.countryid=@countryid

SELECT订单。* FROM订单INNER JOIN客户ON customers.customerid = orders.customerid WHERE customers.countryid=@countryid

请注意联接查询如何仅从一个表返回数据,但使用联接来标识要返回的行 然后,一旦获得数据集中的数据,就可以使用getparentrow和getchildrows方法对其进行导航。这就是ADO.Net管理分层数据的方式。 您确实需要这种一次一个表的方法,因为,假设您的数据库中有外键约束,则需要从delete中以相反的顺序插入和更新。

编辑是的,这确实意味着在某些情况下,根据您想要的数据和主键的结构,您最终可能会得到一组大量的JOINS,它们仍然只从最后的表中提取数据层次结构。就传统SQL而言,这似乎是错误的,但实际上它很好。与一个将返回父数据的多个副本的大型连接查询相比,您必须通过线路回退的数据量减少,从而在多个更复杂的查询中丢失的时间得以节省。