Технология Microsoft ADO.NET

Запись содержимого и структуры типизированного объекта DataSet


Содержимое объекта DataSet может быть записано в виде XML-файла. Это очень удобно для последующей передачи данных или межплатформенного взаимодействия. Для записи используется метод WriteXml, который, подобно методу ReadXml, может записывать данные в файл, в объект подкласса XmlWriter, в объект подкласса TextWriter или в поток (рис. 11.30).


Рис. 11.30.  Перегруженный метод WriteXml

Необязательный параметр XmlWriteMode позволяет дополнительно уточнять записываемые данные. Его значения приводятся в таблице 11.9.

Таблица 11.9. Значения параметра XmlWriteMode

ЗначениеОписание
IgnoreSchema В XML-документ записываются только данные объекта DataSet. Если данные не загружены, документ не создается. Это значение по умолчанию
WriteSchema В XML-файл записываются данные объекта DataSet с добавлением схемы в качестве встроенного XSD-документа
DiffGram В XML-документ сохраняются первоначальные и текущие значения данных

Для записи схемы DataSet применяется метод WriteXmlSchema, который записывает данные в те же объекты, что и методы WriteXml или ReadXml (рис. 11.31):


Рис. 11.31.  Перегруженный метод WriteXmlSchema

Скопируйте папку приложения TypedDataSetReadXML и назовите ее "TypedDataSetReadandWriteXML". Добавляем в главное меню следующие пункты (рис. 11.32):

NameText
mnuSave &Сохранить
mnusDiffGram Diff&Gram
mnusIgnoreSchema Ig&nore Schema
mnusWriteSchema &Write Schema
mnusSchema Cохранить схе&му


Рис. 11.32.  Главное меню приложения TypedDataSetReadandWriteXML

Из окна Toolbox перетаскиваем на форму элемент управления SaveFileDialog, в свойстве Filter вводим то же самое значение, что и для OpenFileDialog:

XML and XSD Files(*.xml, *.xsd)| *.xml; *.xsd; |All Files(*.*)|*.*

Создаем обработчик пункта меню "DiffGram", в котором устанавливаем переключатель для различных значений параметра XmlWriteMode метода WriteXml:

private void mnusDiffGram_Click(object sender, System.EventArgs e) { if(saveFileDialog1.ShowDialog() == DialogResult.OK) { XmlWriteMode writeMode = XmlWriteMode.DiffGram; MenuItem menuItem = (MenuItem)sender; switch(menuItem.Index) { case 0: writeMode = XmlWriteMode.DiffGram; break; case 1: writeMode = XmlWriteMode.IgnoreSchema; break; case 2: writeMode = XmlWriteMode.WriteSchema; break; } if (dataGrid1.DataSource == null) { MessageBox.Show("Нет данных для записи!", "Внимание"); return; } DataSet currentds = (DataSet)dataGrid1.DataSource; currentds.WriteXml(saveFileDialog1.FileName, writeMode); } }


Создаем обработчик пункта "Сохранить схему":

private void mnusSchema_Click(object sender, System.EventArgs e) { if(saveFileDialog1.ShowDialog() == DialogResult.OK) { dsTour.WriteXmlSchema(saveFileDialog1.FileName); } if (dataGrid1.DataSource == null) { MessageBox.Show("Нет данных для записи!", "Внимание"); return; } }

Наконец, в конструкторе формы привязываем обработчиков пунктов меню группы "Сохранить" к обработчику пункта "DiffGram":

public Form1() { InitializeComponent(); //Открытие this.mnuDiffGram.Click += new EventHandler(mnuAuto_Click); this.mnuFragment.Click += new EventHandler(mnuAuto_Click); this.mnuIgnoreSchema.Click += new EventHandler(mnuAuto_Click); this.mnuInferSchema.Click += new EventHandler(mnuAuto_Click); this.mnuReadSchema.Click += new EventHandler(mnuAuto_Click); //Сохранение this.mnusIgnoreSchema.Click += new EventHandler(mnusDiffGram_Click); this.mnusWriteSchema.Click += new EventHandler(mnusDiffGram_Click); }

Запускаем приложение. При выборе пункта меню "Write Schema" (метод WriteXml) записываются данные и схема содержимого DataSet (рис. 11.33, А), при выборе пункта "Сохранить схему" (метод WriteXmlSchema) - только схема (рис. 11.33, Б).


увеличить изображение
Рис. 11.33.  Приложение "TypedDataSetReadandWriteXML". А - сохранение данных и схемы содержимого DataSet, Б - сохранение только схемы

В программном обеспечении к курсу вы найдете приложение TypedData SetReadandWriteXML (Code\Glava5\TypedDataSetReadandWriteXML).


Содержание раздела