Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Deb] Questions sur l'intégration des bases de données...

2 réponses
Avatar
Jérôme Quintard
Salut à tous,

J'ai quelques questions de base sur l'utilisation des bases de données sous
VB.NET.

Aujourd'hui (par exemple) j'ai un SqlConnection, trois SqlDataAdapter (Type
de véhicules, Marques, Modeles) et un SqlDataSet.

Première question :
-------------------

Mon DataAdapter effectue une simple requête (Select * from Marques). Pour
énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe
suivante (je fais exprès de ne pas binder sur un composant) :

For Each Row In SqlDataSet.Marques.Rows()
Msgbox Row.Item("Marque").ToString
Next

Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai
donc des doutes sur ma méthode...

Seconde question :
-------------------

Si à un moment T je souhaite récupérer tous les marques correspondant par
exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a t'il
une possibilité pour filtrer le DataAdapter existant sans nécessairement en
créer un autre ?

Troisième et derniere question :
--------------------------------

Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour
chaque marque) voir même de tout les Types de véhicules, Marques (par type
de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon
de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je
suppose !!!) ?

Merci pour vos réponses !!

Jérôme

2 réponses

Avatar
Patrice Ongla
> Mon DataAdapter effectue une simple requête (Select * from Marques). Pour
énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe
suivante (je fais exprès de ne pas binder sur un composant) :

For Each Row In SqlDataSet.Marques.Rows()
Msgbox Row.Item("Marque").ToString
Next

Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai
donc des doutes sur ma méthode...



Oui, pkoi, ça marche pas ?

Seconde question :
-------------------

Si à un moment T je souhaite récupérer tous les marques correspondant par
exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a
t'il une possibilité pour filtrer le DataAdapter existant sans
nécessairement en créer un autre ?



Il n'est pas possible de filtrer le dataset directement, ou en tout cas ce
n'est pas très souple. Par exemple, tu peux lui appliquer un filtre (clause
Where) mais ça te rend un tableau de rows et non un dataset. cela dit, ça
peut être utile. Le mieux et le plus commode c'est de contruire des vues sur
(DataView) sur ton dataset. Tu peux en contruire autant que tu veux, sur les
tables de ton dataset en appliquant les filtres et les tris de ton choix (y
compris sur des critères de tables jointes). Ca permet de en plus de faire
du binding (tu bindes tes contrôles sur la vue et non sur le ds). Y'a encore
la solution intermédiaire via la defaultview du ds, mais le binding des
contrôles ignore les filtres que tu lui appliques, à l'exception du datagrid
(curieusement).

Troisième et derniere question :
--------------------------------

Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour
chaque marque) voir même de tout les Types de véhicules, Marques (par type
de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon
de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je
suppose !!!) ?



Personnellement, je ne vois rien d'autre qu'une boucle imbriquée sur les
rows de la DataTable "Type" de ton DS, puis sur chaque row de "Marque" via
GetChildRows, puis sur chaque row de "Modèle" via GetChildRows encore. A
condition que tu aies créé les relations bien sûr. C'est très simple à
écrire.
Avatar
Jérôme Quintard
> Oui, pkoi, ça marche pas ?



Si mais j'utilisé c'est technique sans lire la doc... juste en essayant, ça
me paraissait logique...

Le mieux et le plus commode c'est de contruire des vues sur
(DataView) sur ton dataset.



Ok compris

C'est très simple à écrire.



Oui finalement c'est que j'ai fais... ça fait quelques petites lignes

Merci !

Jérôme