Лабораторная работа № 8 1. ЦЕЛЬ РАБОТЫ

advertisement
-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 ?
Download