Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 类型化数据集;父/子选择并更新一次数据库(对于每个op)?_Visual Studio_Visual Studio 2012_Ado.net_Strongly Typed Dataset - Fatal编程技术网

Visual studio 类型化数据集;父/子选择并更新一次数据库(对于每个op)?

Visual studio 类型化数据集;父/子选择并更新一次数据库(对于每个op)?,visual-studio,visual-studio-2012,ado.net,strongly-typed-dataset,Visual Studio,Visual Studio 2012,Ado.net,Strongly Typed Dataset,是否可以使用ADO.NET类型的数据集(包含父/子关系中的两个表)向数据集填充一次到d/b的行程(查询可能返回一个或两个表;如果返回一个,则结果集具有来自两个表的列,对吗?),并使用到d/b的一次行程更新d/b(我猜是调用生成的存储过程) 我所说的“是否可能”,是指是否可能让Visual Studio(2012)自动生成类和SQL代码来实现这一点 还是我一个人?看起来很像VS真的想为每个涉及的表生成一个d/b服务器往返 *我猜更新存储过程必须从父级和子级获取表类型的参数,并适当地执行插入/更新/

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

我所说的“是否可能”,是指是否可能让Visual Studio(2012)自动生成类和SQL代码来实现这一点

还是我一个人?看起来很像VS真的想为每个涉及的表生成一个d/b服务器往返


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

是的,每个表一次往返是可行的。 (-当然可以使用联接查询来填充数据表,但VS将不愿意生成update etc SQL。这可能是问题,也可能不是问题,取决于您打算对数据集执行的操作。) 但是,如果数据集中有两个表,比如说customers-orders,那么您通常会使用两个查询和两次数据库访问:

从客户所在的客户中选择*。customerid=@customerid

及 从订单中选择*FROM orders.customerid=@customerid

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

从客户所在的客户中选择*。countryid=@countryid

选择订单。*从订单内部加入客户上的客户。customerid=orders.customerid WHERE customers.countryid=@countryid

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

EDIT Yes,这意味着在某些情况下,根据所需的数据和主键的结构,最终可能会得到一组庞大的联接,这些联接仍然只能从层次结构末尾的表中提取数据。从传统SQL的角度来看,这似乎是错误的,但实际上它很好。与返回父数据的多个副本的一个大型联接查询相比,在多个更复杂的查询中所损失的时间可以节省,因为您必须跨连接回调的数据量减少了