При записи содержимого объекта DataSet в файл или поток XML важно внимательно изучить опции, предлагаемые перечислением System.Data.XmlWriteMode. Исходя из соображений производительности, при сохранении объектов DataSet в виде постоянно существующих XML-файлов рекомендуется одновременно сохранять XML-схему (то есть использовать System.Data.XmlWriteMode.WriteSchema). Запись схемы данных вместе с самими данными обеспечивает существенное ускорение повторной загрузки XML-данных в объект DataSet; в противном случае схема должна будет динамически определяться во время повторной загрузки данных, а это потребует выполнения дополнительной работы. В листинге 14.2 представлен простой пример сохранения объекта DataSet в XML-файле. В этом примере предоставляется возможность задавать параметр WriteSchema.

Чтобы выполнить пример, дополните код, приведенный в листинге 14.1, кодом из листинга 14.2 и добавьте элемент управления Button, который вызывает функцию writeDataSetToFile.

Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet

//-----------------------------------------------------------------------

//Необходимость в этой функции возникает по той причине, что .NET Compact

//Framework не поддерживает перегрузку:

//

//"public void WriteXml(string, XmlWriteMode);"

//

//в качестве функции-члена "public" (только "private")

//-----------------------------------------------------------------------

void  writeDataSetToFile(System.Data.DataSet ds, string  filename, System.Data.XmlWriteMode xmlWriteMode) {

 //Создать объект XmlWriter для записи наших XML-данных

 System.Xml.XmlWriter xmlWriter;

 xmlWriter = new System.Xml.XmlTextWriter(filename, System.Text.Encoding.Default);

 //ПРИМЕЧАНИЕ: Эта перегруженная версия не является общедоступной (public)!

 //ds.WriteXml(filename, xmlWriteMode);

 //Вместо этого используем следующую функцию:

 ds.WriteXml(xmlWriter, xmlWriteMode);

 xmlWriter.Close; //Важно закрыть файл!

}

Сериализация объектов ADO.NET DataSet с помощью пользовательского кода

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

Если вы пишете пользовательский код десериализации для заполнения данными объекта DataSet, то код вашего приложения должен программным путем построить таблицы, столбцы и определения отношений, а затем заполнить таблицы импортируемыми данными. Аналогичным образом, при пользовательском сохранении объекта DataSet логика вашего приложения должна обеспечить итерирование по всем таблицам и сохранение данных с использованием любого желаемого механизма. Для чтения и записи данных с использованием нескольких различных источников можно привлечь гибридную модель; например, объект DataSet может автоматически заполняться данными при помощи объекта SQLDataAdapter, подключенного к базе данных SQL, а впоследствии эти данные могут быть сериализованы с применением пользовательского формата, локального для устройства. Объектам ADO.NET DataSet безразлично, каким именно образом данные были в них помещены и откуда они поступили.

Перейти на страницу:

Похожие книги