0

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

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

还是我有点靠自己?它看起来很像 VS 真的想为每个涉及的表生成一个 d/b 服务器往返。

*我猜更新存储过程必须从父子节点获取表类型参数,并适当地执行插入/更新/删除。

4

1 回答 1

1

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

SELECT * FROM customers WHERE customers.customerid=@customerid

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

更违反直觉的是您希望一个国家的所有客户和订单的情况:

SELECT * FROM customers WHERE customers.countryid=@countryid

选择订单。* FROM orders INNER JOIN customers ON customers.customerid=orders.customerid WHERE customers.countryid=@countryid

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

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

于 2013-09-27T00:34:35.727 回答