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 的表,其中包含两列: attr1 和 attr2。 两列的ColumnMapping属性将设置为MappingType.Attribute。
数据集: DocumentElement
表格: 元素1
| attr1 | attr2 |
|---|---|
| value1 | value2 |
不带属性或子元素的元素
如果元素没有子元素或属性,则会将其推断为列。 列 ColumnMapping 的属性将设置为 MappingType.Element。 子元素的文本存储在表中的行中。 例如,请考虑以下 XML:
<DocumentElement>
<Element1>
<ChildElement1>Text1</ChildElement1>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
推理过程将生成一个名为 Element1 的表,其中包含两列, ChildElement1 和 ChildElement2。
ColumnMapping 两列的属性将被设置为 MappingType.Element。
数据集: DocumentElement
表格: 元素1
| ChildElement1 | ChildElement2 |
|---|---|
| 文本一 | Text2 |