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 |