我会尽可能地尽量简化我的问题。
随意评论并更正我的英语。希望你能理解我。
我的主要问题是: 是否有任何简单且“自动”的方式,只在数据集中填充与其他表格中的数据相关的行?
假设我们拥有以下架构的数据库:
现在,我正在尝试使用表“Orders”进行相同的操作,并创建自定义方法“FillByDate”。它有效,但有一个小问题:
DataSet1 myDataSetInstance = new DataSet1();
DataSet1TableAdapters.OrdersTableAdapter OrdersTA = new DataSet1TableAdapters.OrdersTableAdapter();
OrdersTA.FillByDate(myDataSetInstance.Orders, new DateTime(2013, 1,1), DateTime.Now);
foreach (var row in myDataSetInstance.Orders)
{
MessageBox.Show(row.Comments); // OK
MessageBox.Show(row.CustomersRow.Name); //NULL
}
从Customers表中获取相关行是不可能的 - 首先我必须手动填充该表。我可以看到两种方法来做到这一点
我真的相信,必须采用“更好”的方式来做到这一点。
答案 0 :(得分:0)
要解决此问题的几种方法 - 如果您只是要读取数据,则可以使用连接查询来填充数据集。 或者,您可以使用连接查询来填充子表。查看您的示例,假设您要列出特定城市中所有客户的客户和订单。您已经为您的客户TA编写了“FillbyCity”查询 - 您将为您的订单编写类似的FillbyCity查询。是的,您可以使用连接到customers表来执行此操作:SELECT Orders。* FROM Orders INNER JOIN customers on customers.customerid = orders.customerid WHERE customers.city = @city 然后,您将使用数据关联将各个客户链接到他们的订单,具体取决于您的应用程序的要求。
(如果你有David Sceppa的'Programming ADO.Net 2.0',这将在第7章讨论)
“但是对于更多的表格,这种方法需要为每个TableAdapter提供数十个自定义查询。”为什么几十个?我不确定你要去哪里。
(PS你的英语很好,除了把它和它的混合起来 - 但很多母语人士也这样做。)
答案 1 :(得分:0)
有一个模糊的......甚至不知道该怎么称呼它 - ADO.NET SQL扩展,或者什么 - 一个名为SHAPE的命令,它描述了你正在寻找的关系和ADO.NET使用“特殊”SQL为您提供一个很好地包含多个相关表的数据集。
SHAPE {select * from customers}
APPEND ({select * from orders} AS rsOrders
RELATE customerid TO customerid)
它运作得很漂亮,但我认为它已经老了,几乎没有(不支持)
FOR XML
T-SQL子句就是这样做的。我还没有自己(我)使用FOR XML来填充DataSet
,但是如果你跟随answer I left中的链接到另一个类似的问题,我认为它会起作用。