推断列

ADO.NET 从 XML 文档中确定了哪些元素要作为 DataSet 的表进行推断后,即开始推断这些表的列。 ADO.NET 2.0 引入了一个新的架构推理引擎,该引擎推断每个 simpleType 元素的强类型数据类型。 在以前的版本中,推断的 simpleType 元素的数据类型始终为 xsd:string

迁移和向后兼容性

ReadXml 方法采用 InferSchema 类型的参数。 此参数允许指定与以前版本兼容的推理行为。 InferSchema 枚举的可用值如下表所示。

InferSchema
通过始终将简单类型推断为 String 来提供向后兼容性。

InferTypedSchema
推断强类型化的数据类型。 如果与 DataTable 一起使用,则抛出异常。

IgnoreSchema
忽略任何内联架构并将数据读入现有 DataSet 架构。

特性

推理表中定义,具有属性的元素将推断为表。 然后,该元素的属性将被推断为该表的列。 列的 ColumnMapping 属性将设置为 MappingType.Attribute,以确保将架构写回到 XML 时,列名称将作为属性写入。 特性的值存储在表中的一行中。 例如,请考虑以下 XML:

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

推理过程将生成一个名为 Element1 的表,其中包含两列: attr1attr2。 这两列的 ColumnMapping 属性将设置为 MappingType.Attribute

数据集: DocumentElement

表格: 元素1

attr1 attr2
value1 value2

不带属性或子元素的元素

如果元素没有子元素或属性,则会将其推断为列。 列的 ColumnMapping 属性将设置为 MappingType.Element。 子元素的文本存储在表中的行中。 例如,请考虑以下 XML:

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

推理过程将生成一个名为 Element1 的表,其中包含两列, ChildElement1ChildElement2。 这两列的 ColumnMapping 属性将设置为 MappingType.Element

数据集: DocumentElement

表格: 元素1

ChildElement1 ChildElement2
文本一 Text2

另请参阅