Condividi tramite


Deduzione di colonne

Una volta che ADO.NET ha determinato quali elementi di un documento XML devono essere inferiti come tabelle per un tipo DataSet, vengono inferite le colonne di tali tabelle. In ADO.NET 2.0 è stato introdotto un nuovo motore di inferenza dello schema che consente di inferire un tipo di dati tipizzato per ogni elemento simpleType. Nelle versioni precedenti il tipo di dati di un elemento simpleType inferito era sempre xsd:string.

Migrazione e compatibilità con versioni precedenti

Il metodo ReadXml accetta un argomento di tipo InferSchema. Tale argomento consente di specificare il comportamento di inferenza compatibile con versioni precedenti. Nella tabella seguente sono indicati i valori disponibili per l'enumerazione InferSchema.

InferSchema
Fornisce compatibilità con le versioni precedenti inferendo sempre un tipo semplice come String.

InferTypedSchema
Inferisce un tipo di dati tipizzato in modo sicuro. Viene generata un'eccezione se usato con un tipo DataTable.

IgnoreSchema
Ignora tutti gli schemi inline e legge i dati nello schema DataSet esistente.

Attributi

Come definito nella sezione Inferenza di tabelle, un elemento con attributi verrà inferito come tabella. Gli attributi di tale elemento verranno quindi inferiti come colonne della tabella. La proprietà ColumnMapping delle colonne verrà impostata su MappingType.Attribute, per assicurare che i nomi delle colonne vengano scritti come attributi in caso di riconversione in XML dello schema. I valori degli attributi vengono archiviati in una riga della tabella. Ad esempio, si consideri il seguente codice XML:

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

Il processo di inferenza genererà una tabella denominata Element1 con due colonne, ovvero attr1 e attr2. La proprietà ColumnMapping per entrambe le colonne verrà impostata su MappingType.Attribute.

DataSet: DocumentElement

Table: Element1

attr1 attr2
value1 value2

Elementi privi di attributi o elementi figlio

Se un elemento non dispone di elementi figlio o attributi, tale elemento verrà inferito come colonna. La proprietà ColumnMapping della colonna verrà impostata su MappingType.Element. Il testo degli elementi figlio è archiviato in una riga della tabella. Ad esempio, si consideri il seguente codice XML:

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

Il processo di inferenza genererà una tabella denominata Element1 con due colonne, ovvero ChildElement1 e ChildElement2. La proprietà ColumnMapping per entrambe le colonne verrà impostata su MappingType.Element.

DataSet: DocumentElement

Table: Element1

ChildElement1 ChildElement2
Text1 Text2

Vedi anche