将关系数据读入DataSet的最简单方法

时间:2010-11-17 13:13:30

标签: c# tsql ado.net

我有两个表,其关系表示在第三个n:m表中。让我们称他们为Person,Workgroup和PersonWorkgroups。我有查询返回多个人,如“选择所有具有特定名称的人”。另外我想拥有所有相关的工作组。最后,我希望有一个DataSet填充数据,我可以迭代客户并获得相关的订单。

有人为将这样的结构放入DataSet的最简单方法有一个很好的例子吗?我宁愿在没有任何类型记录集,图形编辑器的纯代码中完成它......

欢呼声, Achim的

3 个答案:

答案 0 :(得分:0)

我真的建议使用LINQ to XML,因为我认为这是处理关系数据库的一种很棒的方法。

如果您只是想运行查询并获得DataSet,那么您是否只能在查询中建立联合:select all personinfo, orderinfo from persons P, orders O where P.personno = O.orderno having a certain name

然后,您将获得一个DataSet,每个订单有一行,并且链接到该订单的人员信息附加到每一行。

答案 1 :(得分:0)

不确定您的意思是DataTable还是数据集。如果执行以下查询:

  select customer.customerid, customername, orderid, orderdate, orderamount
  from customer inner join orders
  on customer.customerid = orders.customerid and customer.customerid = {your id here passed as a parameter}

通过Command对象,结果可以放在DataTable中。如果在一个命令中执行以下两个查询,则可以将结果放在DataSet中以进行客户端处理。您可以使用ADO.NET定义客户端关系。

  select customerid, customername from customer;
  select orderid, orderdate, customerid, orderamount from orders

返回两个表,并使用DataAdapter.Fill()填充数据集。

DataTable方法可能比DataSet方法“更简单”,但它实际上取决于您的应用程序的要求。阅读Command,DataAdapter,DataTable和DataSet对象。使用ADO.NET,您可以通过多种方式解决问题。

由于问题也标记为TSQL:您可以创建存储过程并通过ADO命令执行该过程:

     create proc getCustomerOrders
     @customerid int
     as
     begin
     select
     customer.customerid, customername, orderid, orderdate, orderamount
     from customer inner join orders
      on customer.customerid = orders.customerid and customer.customerid = @customerid
     end

答案 2 :(得分:0)

蒂姆的答案接近我的要求,但表格之间的关系必须在C#代码中重建。在经典的ADO中,可以用特殊的SQL方言定义这样的层次结构。 Ado.Net和T-SQL无法做到这一点。所以我的问题的答案是:这是不可能的!