更新:November 2007
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 |