Partager via


Déduction des colonnes

Une fois que ADO.NET a déterminé à partir d’un document XML les éléments à déduire en tant que tables pour un DataSet, il déduit ensuite les colonnes de ces tables. ADO.NET 2.0 a introduit un nouveau moteur d’inférence de schéma qui déduit un type de données fortement typé pour chaque simpleType élément. Dans les versions précédentes, le type de données d’un élément déduit simpleType était toujours xsd :string.

Migration et compatibilité descendante

La ReadXml méthode prend un argument de type InferSchema. Cet argument vous permet de spécifier le comportement d’inférence compatible avec les versions précédentes. Les valeurs disponibles pour l’énumération InferSchema sont indiquées dans le tableau suivant.

InferSchema Fournit une compatibilité descendante en inférant toujours un type simple comme String.

InferTypedSchema Déduit un type de données fortement typé. Lève une exception s'il est utilisé avec un objet DataTable.

IgnoreSchema Ignore tout schéma inline et lit les données dans le schéma existant DataSet .

Attributs

Comme défini dans Inferring Tables, un élément avec des attributs est déduit sous la forme d’une table. Les attributs de cet élément seront ensuite déduits en tant que colonnes pour la table. La ColumnMapping propriété des colonnes est définie sur MappingType.Attribute pour vous assurer que les noms de colonnes seront écrits en tant qu’attributs si le schéma est réécrit dans XML. Les valeurs des attributs sont stockées dans une ligne de la table. Par exemple, considérez le code XML suivant :

<DocumentElement>
  <Element1 attr1="value1" attr2="value2"/>
</DocumentElement>

Le processus d’inférence génère une table nommée Element1 avec deux colonnes, attr1 et attr2. La ColumnMapping propriété des deux colonnes est définie sur MappingType.Attribute.

Jeu de données: DocumentElement

Table: Élément1

attr1 attr2
valeur1 valeur2

Éléments dépourvus d'attributs ou d'éléments enfants

Si un élément ne comporte ni éléments enfants, ni attributs, il sera déduit en tant que colonne. La ColumnMapping propriété de la colonne est définie sur MappingType.Element. Le texte des éléments enfants est stocké dans une ligne de la table. Par exemple, considérez le code XML suivant :

<DocumentElement>
  <Element1>
    <ChildElement1>Text1</ChildElement1>
    <ChildElement2>Text2</ChildElement2>
  </Element1>
</DocumentElement>

Le processus d’inférence produit une table nommée Element1 avec deux colonnes, ChildElement1 et ChildElement2. La ColumnMapping propriété des deux colonnes est définie sur MappingType.Element.

Jeu de données: DocumentElement

Table: Élément1

ChildElement1 ChildElement2
Texte1 Texte2

Voir aussi