2010-11-17 20 views
1

J'ai deux tables dont la relation est exprimée dans une troisième table n: m. Appelons-les Person, Workgroup et PersonWorkgroups. J'ai une requête qui renvoie plusieurs personnes comme "sélectionner toutes les personnes ayant un certain nom". En outre, je veux avoir tous les groupes de travail connexes. À la fin, je voudrais avoir un DataSet rempli avec les données de manière à ce que je puisse itérer sur les clients et obtenir leurs commandes connexes. Est-ce que quelqu'un est un bon exemple pour la manière la plus simple d'obtenir une telle structure dans un DataSet? Je prefere de le faire dans le code pur sans recordsets tapées, des éditeurs graphiques, ...Manière la plus simple de lire des données relationnelles dans un DataSet

acclamations, Achim

+0

Faut-il être dans ado.net? Je remarque que c'est votre tag – Raymund

Répondre

0

Tims réponse est proche de mon exigence, mais la relation entre les tables doit être reconstruit dans le code C#. Dans ADO classique, il était possible de définir de telles hiérarchies dans un dialecte SQL spécial. Quelque chose comme ça n'est pas possible avec Ado.Net et T-SQL. Donc, la réponse à ma question est: ce n'est tout simplement pas possible!

0

Je voudrais vraiment vous suggérons d'utiliser LINQ to XML, juste parce que je pense qu'il est un moyen génial de travailler avec une base de données relationnelle.

Si vous voulez juste exécuter la requête et obtenir un DataSet, ne pouvez-vous pas faire une union dans votre requête comme ceci: select all personinfo, orderinfo from persons P, orders O where P.personno = O.orderno having a certain name?

Ensuite, vous obtiendrez un DataSet avec une ligne par commande, et les informations de personne liées à cet ordre attaché à chaque ligne.

0

Vous ne savez pas si vous voulez dire DataTable ou Dataset. Si vous exécutez la requête suivante:

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} 

via un objet de commande, les résultats peuvent être placés dans un DataTable. Si vous exécutez les deux requêtes suivantes dans une commande, le résultat peut être placé dans un DataSet pour le traitement côté client. Vous pouvez définir des relations côté client en utilisant ADO.NET.

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

deux tables sont retournées et vous utilisez DataAdapter.Fill() pour remplir l'ensemble de données.

L'approche DataTable pourrait être «plus simple» que l'approche DataSet, mais elle dépend vraiment des exigences de votre application. Lisez les objets Command, DataAdapter, DataTable et DataSet. Avec ADO.NET, vous pouvez résoudre le problème de différentes manières.

Puisque la question est aussi marqué TSQL: vous pouvez créer une procédure stockée et exécuter que via la commande ADO aussi:

 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