| |||||
auteur : Jean-Marc Rabilloud | |||||
La méthode GetSchema ne permet pas de récupérer ce type d'information. Il existe deux méthodes pour atteindre ce résultat.
1) En utilisant la bibliothèque COM SQLDMO.
Par exemple, pour extraire des informations de schéma dont les contraintes de clé primaire, on peut utiliser le code suivant, en ayant ajouté au préalable la référence COM "Microsoft SQLDMO 8.5 Object Library"
2) En passant des commandes SQL
Si votre connexion a les privilèges suffisants pour accéder aux objets système, il est possible d'utiliser une requête pour récupérer les informations.
Reprenons l'exemple donné dans la question ??
Dans ce code je vais remonter la clé primaire de la table à l'aide d'une commande définie telle que :
Puis pour chaque table, j'exécuterais la commande avec les bons paramètres :
Notez que cette approche est sensiblement équivalente à l'écriture d'une requête SQL-SERVER qui serait de la forme :
|
| ||
auteur : Jean-Marc Rabilloud | ||
Il n'existe pas de méthodes universelles pour lire le schéma complet d'une base de données de façon générique. Généralement il y a trois approches possibles :
Le code suivant permet d'extraire très simplement les informations de schéma disponibles de manière "générique" :
Dans l'exemple suivant nous allons extraire quelques valeurs de schéma sur une base SQL Server :
|
| ||||
auteur : Jean-Marc Rabilloud | ||||
Il ne faut pas confondre le schéma entrant (celui du SGBD) avec le schéma local (celui du dataset). De manière générale, le schéma entrant n'est jamais mappé sur le schéma local sauf appel explicite. On a tendance à perdre cela de vue avec les Datasets fortement typés où le schéma est mappé par le code généré, mais lorsqu'on gère ses objets, on doit gérer aussi le mappage du schéma.
Le code suivant va lever l'exception MissingPrimaryKeyException
En effet, l'objet DataAdapter ne va pas mapper le schéma par défaut. Je peux dans ce cas forcer le mappage en appelant la méthode FillSchema de l'objet DataAdapter
On rencontre d'ailleurs un problème identique lorsqu'on charge l'objet DataTable avec un DataReader qui lui ne lit jamais le schéma, comme dans le cas :
Dans ce cas, comme il n'existe pas de méthode simple pour mapper le schéma, on le fait généralement à l'aide du code en recréant la clé primaire, dans notre exemple :
|
| ||
auteur : Jean-Marc Rabilloud | ||
Oui, c'est même assez simple en utilisant la bibliothèque COM ADOX comme dans l'exemple ci-dessous. Cela peut éventuellement se faire uniquement avec du SQL DDL mais c'est nettement plus lourd à écrire.
Le code suivant est un exemple qui permet de transformer le Dataset issu de la base de données exemple AdventureWorks pour SQL Server en base Access.
N.B : Notez que j'ai désactivé la récupération des informations d'auto-incrément puisque je souhaite récupérer les données du dataset pour les injecter dans la base Access, ce qui ne saurait pas possible avec des champs auto-incrémentés.
|
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.