推断列

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 的表,其中包含两列, ChildElement1ChildElement2ColumnMapping 两列的属性将被设置为 MappingType.Element

数据集: DocumentElement

表格: 元素1

ChildElement1 ChildElement2
文本一 Text2

另请参阅