推断列
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
表:Element1
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
表:Element1
ChildElement1 | ChildElement2 |
---|---|
Text1 | Text2 |