1

我会尽量简化我的问题。

随意评论和纠正我的英语。希望你能理解我。

我的主要问题是: 是否有任何简单且“自动化”的方法,仅使用与其他表中的数据相关的行来填充数据集中的表?

假设我们有具有以下架构的数据库:

数据库架构

现在,我正在尝试用“订单”表做同样的事情,并创建自定义方法“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
        }

从客户表中获取相关行是不可能的 - 首先我必须手动填写该表。我可以看到两种方法来做到这一点

  • 获取此表的全部内容 - 但这将是大量不需要的数据
  • 在它的 TableAdapter 中创建自定义查询 - 类似于 FillByOrdersByDate(@Date1, @Date2) - 当我只有 2 个表和 1 个关系时,这很容易,但是对于更多表,此方法将需要为每个 TableAdapter 进行数十个自定义查询。

我真的相信,必须有“更好”的方法来做到这一点。

4

2 回答 2

0

有一个晦涩难懂的......甚至不知道该怎么称呼它 - ADO.NET SQL 扩展,或者其他什么 - 一个名为 SHAPE 的命令,它描述了您正在寻找的关系,而 ADO.NET 使用那个“特殊” SQL为您提供一个包含多个相关表的数据集。

   SHAPE  {select * from customers}
   APPEND ({select * from orders} AS rsOrders
           RELATE customerid TO customerid)

它工作得很好,但我认为它已经过时并且几乎没有(不受)支持

MS 建议将 SHAPE 提供程序折旧并改用 XML(抱歉 - 丢失了链接,但那又回到了 .NET 1.1 中)并且他们指向 XML。我认为FOR XMLT-SQL 子句起到了作用。我自己(还)没有做过,我使用 FOR XML 来填充 a DataSet,但是如果您按照我留下的另一个类似问题的答案中的链接进行操作,我认为它会起作用。

于 2013-05-10T18:30:48.280 回答
0

有几种方法可以解决这个问题 - 如果您只打算读取数据,则可以使用连接查询来填充数据集。或者,您可以使用连接查询来填充子表。查看您的示例,假设您想要列出特定城市中所有客户的客户和订单。您已经为您的客户 TA 编写了一个“FillbyCity”查询 - 您将为您的订单 TA 编写一个类似的 FillbyCity 查询。是的,您可以使用与客户表的连接来执行此操作: 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你的英语很好,除了混淆它和它 - 但很多母语人士也这样做。.)

于 2013-03-11T02:22:08.203 回答