Загрузка сведений о схеме DataSet из XML (ADO.NET)

Обновлен: November 2007

Схема DataSet (с таблицами, столбцами, связями и ограничениями) может быть определена программно, путем создания с помощью методов Fill или FillSchema объекта DataAdapter, или загружена из XML-документа. Для загрузки сведений о схеме DataSet из XML-документа можно использовать метод ReadXmlSchema или метод InferXmlSchema объекта DataSet. ReadXmlSchema дает возможность загружать или выводить сведения о схеме DataSet из документа, содержащего схему на языке XSD, или из XML-документа со встроенной схемой XML. InferXmlSchema дает возможность выводить схему из XML-документа, не учитывая некоторые указанные пространства имен XML.

atchhx4f.alert_note(ru-ru,VS.90).gifПримечание.

Упорядочение таблицы в DataSet может не сохраниться при использовании веб-служб или XML-сериализации для передачи набора данных DataSet, созданного в памяти с помощью конструкций XSD (таких как вложенные связи). Таким образом, в этом случае дальнейшие действия получателя объекта DataSet не должны зависеть от существующего упорядочения таблицы. Однако упорядочение таблицы всегда сохраняется, если переданная схема DataSet была считана из XSD-файлов, а не создана в памяти.

ReadXmlSchema

Для загрузки схемы DataSet из XML-документа без загрузки других данных используется метод ReadXmlSchemaDataSet. Метод ReadXmlSchema создает схему DataSet, определенную с помощью схемы на языке XSD.

Метод ReadXmlSchema принимает один аргумент, представляющий собой имя файла, поток или объект XmlReader, содержащий XML-документ, который необходимо загрузить. XML-документ может содержать либо только схему, либо схему со встроенными XML-элементами, содержащими данные. Дополнительные сведения о записи встроенной схемы в виде схемы XML см. в разделе Выведение реляционной структуры DataSet из схемы XML (XSD).

Если XML-документ, переданный ReadXmlSchema, не содержит сведений о встроенной схеме, ReadXmlSchema выведет схему из элементов в XML-документе. Если DataSet уже содержит схему, текущая схема будет расширена путем добавления новых таблиц, если они еще не существуют. Новые столбцы не будут добавляться к существующим таблицам. Если добавленный столбец уже существует в DataSet, но имеет тип, несовместимый со столбцом, содержащимся в XML, возникает исключение. Дополнительные сведения о том, как ReadXmlSchema выводит схему из XML-документа, см. в разделе Вывод реляционной структуры DataSet из XML (ADO.NET).

Хотя ReadXmlSchema загружает или выводит только схему DataSet, метод ReadXmlDataSet загружает или выводит и схему, и данные, содержащиеся в XML-документе. Дополнительные сведения см. в разделе Загрузка DataSet из XML (ADO.NET).

Следующие примеры кода показывают способ загрузки схемы DataSet из XML-документа или потока. Первый пример показывает имя файла схемы XML, переданный методу ReadXmlSchema. Второй пример показывает System.IO.StreamReader.

Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema("schema.xsd")
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("schema.xsd");
Dim xmlStream As System.IO.StreamReader = New System.IO.StreamReader ("schema.xsd");
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema(xmlStream)
xmlStream.Close()
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(xmlStream);
xmlStream.Close();

InferXmlSchema

Можно также дать указание объекту DataSet вывести свою схему из XML-документа с помощью метода InferXmlSchema объекта DataSet. Метод InferXmlSchema действует так же, как метод ReadXml со значением XmlReadMode параметра InferSchema (загружает данные, а также формирует схему) и метод ReadXmlSchema, если считанный документ не содержит встроенной схемы. Но метод InferXmlSchema предоставляет дополнительную возможность, позволяя пропускать определенные пространства имен XML при формировании схемы. Метод InferXmlSchema принимает два обязательных аргумента: расположение XML-документа, заданное по имени файла, потока или объекта XmlReader, и строковый массив пространств имен XML, которые должны быть пропущены в этой операции.

Например, рассмотрим следующий XML-код:

<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
  <CategoryID od:adotype="3">1</CategoryID> 
  <CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName> 
  <Description od:adotype="203">Soft drinks and teas</Description> 
</Categories>
<Products>
  <ProductID od:adotype="20">1</ProductID> 
  <ReorderLevel od:adotype="3">10</ReorderLevel> 
  <Discontinued od:adotype="11">0</Discontinued> 
</Products>
</NewDataSet>

Атрибуты, заданные для элементов в предыдущем XML-документе, являются таковыми, что и метод ReadXmlSchema, и метод ReadXml со значением XmlReadMode аргумента InferSchema создает таблицы для каждого элемента в документе: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel и Discontinued. (Дополнительные сведения см. в разделе Вывод реляционной структуры DataSet из XML (ADO.NET).) Однако более подходящей могла бы стать структура, в которой создаются только таблицы Categories и Products, затем столбцы CategoryID, CategoryName и Description в таблице Categories и, наконец, столбцы ProductID, ReorderLevel и Discontinued в таблице Products. Для обеспечения того, чтобы в сформированной схеме были пропущены атрибуты, заданные в XML-элементах, можно применить метод InferXmlSchema и указать пропускаемое пространство имен XML для officedata, как показано в следующем примере.

Dim dataSet As DataSet = New DataSet
dataSet.InferXmlSchema("input_od.xml", New String() {"urn:schemas-microsoft-com:officedata"})
DataSet dataSet = new DataSet();
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");

См. также

Основные понятия

Загрузка DataSet из XML (ADO.NET)

Другие ресурсы

Использование XML в DataSet (ADO.NET)

Выведение реляционной структуры DataSet из схемы XML (XSD)

Вывод реляционной структуры DataSet из XML (ADO.NET)

Объекты DataSet, DataTable и DataView (ADO.NET)