-1– Лабораторная работа № 8 Доступ к данным. Представление столбца в формате XML 1. ЦЕЛЬ РАБОТЫ Целью работы является освоение методики представления данных таблицы формате XML, а также изучение свойств типа DataRow. 2. СОСТАВ РАБОЧЕГО МЕСТА 2.1. Оборудование: IBM-совместимый персональный компьютер (ПК). 2.2. Программное обеспечение: операционная система Windows, интегрированная оболочка Visual Studio 2005 с установленным компонентом Visual C#. 3. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Тип DataRow Структура таблицы определяется как коллекция объектов DataColumn. Для хранения этой коллекции в объекте DataTable используется внутренний объект DataColumnCollection. Помимо этого, для DataTable важна еще одна коллекция: коллекция объектов DataRow, которая и определяет собственно данные, хранящиеся в таблице. Каждую запись в таблице будет представлять отдельный объект DataRow. При помощи членов класса DataRow мы можем производить операции вставки, изменения и удаления строк из таблицы, а также сравнивать значения, которые содержатся в строках. Работа с DataRow несколько отличается от работы с DataCol umn, поскольку объект DataRow не нужно создавать напрямую. Вместо этого мы получаем на него ссылку при помощи объекта DataTable. Например, предположим, что нам потребовалось вставить новую строку в таблицу Empl oyees. Для этого нам потребуется метод DataTable.NewRow(): // Создаем объект таблицы DataTable empTable = new DataTable(“Employees"); //...Считаем, что здесь мы добавили в таблицу столбцы EmpID. FirstName и LastNarne... // Создаем строку для сотрудника DataRow row = empTable.NewRowO: row[EmpID"] = 102: row["FirstName"] = "Joe"; row["LastName"]. = "Blow": // Добавляем ее во внутреннюю коллекцию строк в таблице - DataRowCollectlon empTable.Rows.Add(row): Как мы видим на нашем примере, для хранения данных о строках в объекте DataTable используется еще одна внутренняя коллекция — DataRowCollection. Теперь еще немного о типе DataRow. Наиболее важные свойства этого типа представлены в табл. Кроме того, отметим, что класс DataRow определяет индексатор, при помощи которого можно получить значение из поля строки по порядковому номеру. Конечно же, то же самое значение можно будет получить и по имени столбца. -2– Члены класса DataRow Член Назначение AcceptChangesQ RejectChangesQ Для записи в строку (или отказа от них) всех изменений, произведенных начиная с момента, когда последний раз был вызван метод AoceptChanges() Begin Ed it() EndEditQ Cancel Edlt() Начать, завершить, прекратить операции редактирования для объекта DataRow Delete() Помечает строку для удаления при следующем вызове метода AcceptChanges() HasErrors GetColumnsInErrors() GetColumnError() ClearErrors() RowError Свойство HasErrors возвращает логическое значение, определяющее, присутствуют ли ошибки в значениях столбцов для данной строки. Если такие ошибки есть, то для получения значений, которые нарушают установленные правила, можно использовать метод GetColumnsInError(). Для получения описания ошибки можно использовать GetColumnError(), a ClearErrors() просто удаляет все ошибочные значения из строки. Свойство RowError позволяет настроить текстовое описание для ошибки в столбце IsNull() Возвращает информацию о том, содержит ли строка в указанном поле пустое значение (значение типа NULL) ItemArray Позволяет получить или установить значения всех полей строки при помощи массива объектов RowState Позволяет получать информацию о текущем состоянии объекта DataRow. Используются значения из перечисления RowState Table Это свойство используется для получения указателя на таблицу, содержащую текущий объект DataRow Работа со свойством Data Row. RowState Большинство методов и свойств класса DataRow используется только в контексте размещения объекта DataRow в таблице (DataTable). Мы вскоре познакомимся с операциями вставки, удаления и изменения строк, но до этого мы рассмотрим свойство RowState класса DataRow. Главное назначение этого свойства — определять (в процессе выполнения программы), в каком состоянии находятся выбранные нами строки в таблице: были ли они изменены, только что вставлены и т. п. Для свойства RowState используются значения из перечисления DataRowState Значения перечисления DataRowState Значение Описание Deleted Строка была изменена при помощи метода Data Row. Delete Detached Строка была создана, но она еще не является частью DataRowCotlection. Обычно строка находится в таком состоянии непосредственно после вставки или после принудительного вывода из коллекции DataRowCollection Modified Строка была изменена, но метод AcceptChanges() еще не вызывался New Строка была .добавлена в коллекцию DataRowCollection, но метод AcceptChanges() еще не был вызван Unchanged Строка не была изменена с момента последнего вызова метода AcceptChanges() Работа со свойством ItemArray Еще один очень важный член класса DataRow — свойство ItemArray. Это свойство позволяет получить полный «снимок» текущей строки в виде массива объектов типа System.Object. Кроме того, при помощи этого свойства мы можем вставить в таблицу новую строку, не указывая явно значения для каждого столбца. Проиллюстрируем это примером. Предположим, что в нашей таблице есть два столбца — EmpID и FirstName. Мы можем добавить новые строки, передавая массив объектов через свойство ItemArray: -3– // Объявляем массив object [] myVals; = new object [2]: DataRow dr: // Создаем новые строки и добавляем их в DataRowCollectlon for (int i - 0; 1 < 5; i++) { myVals[0] = i: myVals[l] = "Name " + i : dr = myTable.NewRow(); dr.ItemArray = myVals; myTable.Rows.Add(dr) ; } // А теперь выводим каждое из значений foreach(DataRow r In myTable.Rows) { foreach(DataColumn c in myTable.Columns) { Console.WriteLine( r[c] ) ; } } Представление столбца в формате XML Cвойство — ColumnMapping определяет, как данный столбец будет представлен в формате XML при извлечении содержимого столбца при помощи метода WriteXmL(). Для свойства ColumnMapping используются значения из перечисления MappingType Значения перечисления MappingType Значение перечисления Описание MappingType Attribute Столбцу соответствует атрибут XML Element Столбцу соответствует элемент XML (это значение используется по умолчанию) Hidden Столбцу соответствует внутренняя структура TableElement Столбцу соответствует значение таблицы Text Столбцу соответствует значение текста По умолчанию для Col umnMappi ng используется значение Mappi ngType.Element. Что же это значит? Все очень просто. Предположим, что вы записываете содержимое DataSet в текстовый файл в формате XML При использовании значения Element столбцу EmpID в текстовом файле будут соответствовать значения вида: <Employee> <EmpID>500</EmpID> </Employee> Если же мы установим для свойства ColurnnMapping значение Mappi ngType. Attribute, то столбцу EmpID в текстовом файле XML будут соответствовать уже следующие строки: Employee EmpID = "500"/> Одна из главных целей, которая преследовалась при разработке ADO.NET, — это упрощение работы с данными в формате XML При помощи типа DataSet мы можем представлять наши таблицы (со всеми данными), отношения между ними, ограничения и все остальное в формате XML и записывать их в поток (например, текстовый файл). Если у нас уже создан объект DataSet, то для записи его содержимого в формате XML достаточно просто вызывать метод WriteXml (): -4– protected void btnToXML_Click (object sender. System.EventArgs e) { // Записываем DataSet весь целиком в файл в каталоге арр carsDataSet.WriteXml("cars.xml"): MessageBox.Show("Wrote CarDataSet to XML file in app directory"); btnReadXML.Enabled = true; } Считывание текстовых данных из текстового файла в формате XML в объект DataSet производится при помощи метода ReadXml(). 4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ Порядок выполнения работы: 1. Составить программу для операций над элементами таблицы, используя методы класса DataRow которая будет сохраняться в XML-виде по одному из вариантов, приведенных в следующей таблице. Вводимые значения и результаты вывести на экран дисплея. № вариан-та 1 2 3 4 5 6 7 8 Описание действий программы Создать таблицу из 3 столбцов. Добавить в столбцы новые значения и сохранить их. Затем отменить сохранение и вернуть столбцы к исходному виду. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Отметить строку для удаления и при использовании необходимого метода – удалить её. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Поместить в таблицу новую строку и проверить её на наличие пустых значений. Затем сохранить при помощи необходимого метода. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Добавить несколько строк при помощи массива объектов. Проверить новые строки на наличие ошибок. Сохранить изменения при помощи необходимого метода. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Добавить новую строку и сохранить её. Затем изменить её и удалить. После этого – отменить удаление. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов разных типов данных. Затем добавить несколько строк с ошибками. Проверить строки на ошибки и удалить все ошибочные значения. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Добавить несколько строк при помощи массива объектов. Проверить строки на наличие пустых знчений. Сохранить изменения. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Пометить для удаления одну из строк. Ввести новые строки. Затем при помощи необходимого метода сохранить изменения и удалить отмеченную строку. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. -5– 9 10 Создать таблицу из 3 столбцов. Изменить существующую строку. Проверить её на наличие ошибок. При необходимости – удалить их. Затем отменить сделанные изменения. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. Создать таблицу из 3 столбцов. Добавить строку и сохранить изменения. Затем изменить добавленную строку и проверить её на наличие пустых значений. После этого отменить последние действия. Отобразить произведённые действия при помощи DataRow.RowState. Записать итоговые данные в формате XML. 2. Ввести программу с клавиатуры с использованием Visual Studio 2005. 3. Отладить программу и запустить на выполнение. 5. СОДЕРЖАНИЕ ОТЧЕТА В отчете должны быть представлен текст программы, значения вводимых величин и полученные значения выводимых величин. 6. ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ 1. Для чего служит тип DataRow ? 2. Как работает свойсвто DataRow.RowState ? 3. Каковы основные члены класса DataRow и за что они отвечают? 4. Как функционирует свойство ItemArray ? 5. При помощи какой функции данные сохраняются в формате XML 6. При помощи какого метода происходит считывание текстовых данных из текстового файла в формате XML ?