是的,每张桌子往返一次是要走的路。( - 当然可以使用连接查询来填充数据表,但是 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 而言,这似乎是错误的,但实际上它很好。与返回多个父数据副本的大型联接查询相比,您必须通过网络拉回的数据量减少,从而节省了您在多个更复杂查询中损失的时间。