0

Est-il possible, à l'aide d'un DataSet typé ADO.NET contenant deux tables dans une relation parent/enfant, de remplir le DataSet avec UN trajet vers le d/b (la requête peut renvoyer une ou deux tables; a des colonnes des deux tables, n'est-ce pas?), et mettre à jour le d/b avec un voyage à la d/b (appel à proc stocké généré, je suppose).jeu de données typé; parent/enfant sélectionner et mettre à jour avec un voyage à la base de données (pour chaque op)?

Par "est-ce possible", je veux dire est-il possible que Visual Studio (2012) génère automagiquement les classes et le code SQL pour que cela se produise?

Ou suis-je un peu seul? Cela ressemble énormément à VS qui veut vraiment générer un aller-retour d'un serveur d/b pour chaque table impliquée.

* Je suppose que la procédure stockée de mise à jour doit prendre des paramètres de type table de parent et enfant, et effectuer des insertions/mises à jour/suppressions de façon appropriée.

Répondre

1

Oui, un aller-retour par table est le chemin à parcourir. (- Il est certainement possible d'utiliser une requête de jointure pour renseigner un datatable mais VS sera alors réticent à générer une mise à jour etc SQL Cela peut ou non poser problème, selon ce que vous avez l'intention de faire avec l'ensemble de données. si vous avez deux tables dans un ensemble de données, permet de dire que les clients - les commandes, alors vous utilisez généralement deux requêtes, et deux voyages à la db:

SELECT * FROM clients WHERE [email protected]

et SÉLECTIONNER * À PARTIR DES COMMANDES WHERE [email protected]

Un peu plus contre-intuitif est la situation où vous ant tous les clients et les commandes pour un pays:

SELECT * FROM clients WHERE [email protected]~~V~~singular~~3rd

et

commandes SELECT * FROM commandes INNER JOIN les clients sur clients.idclient = Orders.CustomerID. WHERE [email protected]

Notez que la requête de jointure renvoie des données à partir d'une seule table, mais utilise la jointure pour identifier les lignes à renvoyer.
Ensuite, une fois que vous avez les données dans votre ensemble de données, vous pouvez le parcourir en utilisant les méthodes getparentrow et getchildrows. C'est ainsi que ADO.Net gère les données hiérarchiques. Vous avez besoin de cette approche table-à-la-fois, car, en supposant que vous ayez des contraintes de clé étrangère dans votre base de données, vous devez insérer et mettre à jour dans l'ordre inverse depuis la suppression.

EDIT Oui, cela signifie que dans certaines circonstances, en fonction des données que vous voulez et de la structure de vos clés primaires, vous pourriez vous retrouver avec un ensemble de JOINS gigantesques qui tirent toujours les données de la table au fin de la hiérarchie. Cela peut sembler faux en termes de SQL traditionnel, mais en fait c'est bien. Le temps que vous avez perdu dans les requêtes multiples et plus complexes est sauvegardé par la quantité réduite de données que vous devez retirer sur le réseau, par rapport à une grande requête de jointure qui renvoie plusieurs copies des données parentes.

Questions connexes