Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_6_Tekhnologia_programmirovania.docx
Скачиваний:
45
Добавлен:
20.03.2016
Размер:
91.4 Кб
Скачать

Лабораторная работа №6. Доступ к данным с помощью технологии ado.Net

1. Цель работы

Изучить принципы доступа к данным с помощью технологии ADO.NET. Получить навыки работы с пространствами имен, классами, методами, используемыми для работы с данными.

2. Сведения из теории

Все возможности ADO.NET заключены в типах, определенных в соответствующих пространствах имен, главным из которых является System.Data. Именно это пространство имен и будет рассматриваться в этой лабораторной работе.

2.1. Типы пространства имен System.Data

Эти типы предназначены для представления данных, полученных из источника (но не для установления соединения непосредственно с источником). В основном эти типы представляют собой объектные представления примитивов для работы с базами данных – таблицами, строками, столбцами, ограничениями и т.п. Наиболее часто используемые типы System.Data представлены в таблице. Кроме того, в этом пространстве имен определены важные исключения, которые могут быть сгенерированы при работе с БД (NoNullAllowedException, RowNotInTableException, MissingPrimaryKeyException и т.п.).

Тип

Назначение

DataColumnCollection

DataColumn

DataColumn представляет собой один столбец в объекте DataTable, DataColumnCollection – все столбцы

ConstraintCollection

Constraint

Constraint – объектно-ориентированная оболочка вокруг ограничения (например, внешнего ключа или уникальности), наложенного на один или несколько объектов DataColumn, ConstraintCollection – все ограничения в объекте DataTable

DataRowCollection

DataRow

DataRow представляет собой единственную строку в DataTable, DataRowCollection – все строки в DataTable

DataRowView

DataView

DataRowView позволяет создавать настроенное представление единственной строки, DataView – созданное программным образом представление объекта DataTable, которое может быть использовано для сортировки, фильтрации, поиска, редактирования и перемещения

DataSet

Объект, создаваемый в оперативной памяти на клиентском компьютере. DataSet состоит из множества объектов DataTable и информации об отношениях между ними

ForeignKeyConstraint

UniqueConstraint

ForeignKeyConstraint представляет ограничение, налагаемое на набор столбцов в таблицах, связанных отношениями первичный - внешний ключ. UniqueConstraint – ограничение, при помощи которого гарантируется, что в столбце не будет повторяющихся записей

DataRelationCollection

DataRelation

Тип DataRelationCollection представляет набор всех отношений (то есть объектов DataRelation) между таблицами в DataSet

DataTableCollection

DataTable

Тип DataTableCollection представляет набор всех таблиц (объектов DataTable) в DataSet

2.2. Тип DataColumn

Тип DataColumn представляет отдельный столбец в таблице (которая, в свою очередь, должна быть представлена объектом DataTable). Наиболее важные свойства этого класса представлены в таблице.

Свойство

Описание

AllowDbNull

Определяет, может ли столбец содержать значения типа Null (пустые значения). По умолчанию – может (свойство равно true)

AutoIncrement

AutoIncrementSeed

AutoIncrementStep

Используются для настройки автоматического приращения значений в таблице. Это может быть полезно, если необходимо обеспечить уникальность значений в столбце (например, для первичного ключа). По умолчанию автоматическое приращение значений в столбцах отключено

Caption

Определяет заголовок столбца для отображения в пользовательском приложении (например, этот заголовок может быть использован в DataGrid)

ColumnMapping

Определяет, как будет представлен столбец (объект DataColumn) при сохранении DataSet в формате XML

ColumnName

Позволяет получить или установить имя столбца в коллекции Columns (внутренняя коллекция для столбцов в DataTable). Если имя столбца не определено явно, будут использованы значения по умолчанию: Column1, Column2, Column3 и т.д.

DataType

Определяет тип данных (boolean, string, float и т.п.), используемый для значений в столбце

DefaultValue

Позволяет установить или получить значение по умолчанию для столбца. Это значение будет автоматически использовано, если при вставке новой строки не укажете явно другое значение

Expression

Позволяет получить или установить выражение, используемое для фильтрации новых строк, вычисления значения в столбце или создания столбцов с агрегатными значениями

Ordinal

Позволяет установить порядковый номер столбца в коллекции Columns в DataTable

ReadOnly

Определяет, будет ли столбец только для чтения. По умолчанию имеет значение false

Table

Возвращает DataTable, которой принадлежит данный объект DataColumn

Unique

Позволяет определить, будут ли в столбце допускаться повторяющиеся значения. Если столбец является первичным ключом, то это свойство должно иметь значение true

2.3. Тип DataRow

Как было сказано выше, структура таблицы определяется как коллекция объектов DataColumn. Для хранения этой коллекции в объекте DataTable используется внутренний объект DataColumnCollection. Помимо этого, для DataTable важна еще одна коллекция: коллекция объектов DataRow, которая и определяет собственно данные, хранящиеся в таблице. При помощи компонентов этого класса можно производить операции вставки, изменения и удаления строк таблицы, а также сравнивать значения, которые содержатся в строках.

Наиболее важные компоненты этого класса представлены в таблице. Кроме того, класс DataRow определяет индексатор, при помощи которого можно получить значение из поля строки по порядковому номеру. Конечно, то же самое значение можно будет получить и по имени столбца.

Компонент

Назначение

AcceptChanges()

RejectChanges()

Для записи в строку (или отказа от них) всех изменений, произведенных начиная с момента, когда последний раз был вызван метод AcceptChanges()

BeginEdit()

EndEdit()

CancelEdit()

Начать, завершить, прекратить операции редактирования для объекта DataRow

Delete()

Помечает строку для удаления при следующем вызове метода AcceptChanges()

HasErrors

GetColumnsInErrors()

GetColumnError()

ClearErrors()

RowError

Свойство HasErrors возвращает логическое значение, определяющее, присутствуют ли ошибки в значениях столбцов для данной строки. Если такие ошибки есть, то для получения значений, которые нарушают установленные правила, можно использовать метод GetColumnsInErrors(). Для получения описания ошибки можно использовать GetColumnError(), а ClearErrors() просто удаляет все ошибочные значения из строки. Свойство RowError позволяет настроить текстовое описание для ошибки в столбце

IsNull()

Возвращает информацию о том, содержит ли строка в указанном поле пустое значение (типа NULL)

ItemArray

Позволяет получить или установить значения всех полей строки при помощи массива объектов

RowState

Позволяет получать информацию о текущем состоянии объекта DataRow. Используются значения из перечисления RowState

Table

Это свойство используется для получения указателя на таблицу, содержащую текущий объект DataRow

Главное назначение свойства RowState – определять (в процессе выполнения программы), в каком состоянии находятся выбранные строки в таблице: были ли они изменены, только что вставлены и т.п. Для этого свойства используются значения из перечисления DataRowState:

Значение

Описание

Deleted

Строка была изменена при помощи метода DataRow.Delete

Detached

Строка была создана, но она еще не является частью DataRowCollection. Обычно строка находится в таком состоянии непосредственно после вставки или после принудительного вывода из коллекции DataRowCollection

Modified

Строка была изменена, но метод AcceptChanges() еще не вызывался

New

Строка была добавлена в коллекцию DataRowCollection, но метод AcceptChanges() еще не был вызван

Unchanged

Строка не была изменена с момента последнего вызова метода AcceptChanges()

2.4. Тип DataTable

Класс DataTable используется для создания в оперативной памяти моделей табличных наборов данных. Можно создавать объекты DataTable программным образом, однако чаще в приложениях объект DataTable создается автоматически с помощью возможностей DataSet и типов, определенных в пространствах имен System.Data.OleDb и System.Data.SqlClient. Наиболее важные свойства DataTable представлены в таблице:

Свойство

Описание

CaseSensitive

Определяет, будет ли при сравнении символьных данных в таблице учитываться регистр символов. По умолчанию – false (не будет)

ChildRelations

Возвращает коллекцию подчиненных отношений (DataRelationCollection) для объекта DataTable (если такие отношения есть)

Columns

Возвращает набор столбцов для таблицы

Constraints

Позволяет получить коллекцию ограничений, определенных в столбце (ConstraintCollection)

DataSet

Позволяет получить ссылку на объект DataSet, к которому принадлежит данная таблица (если такой объект есть)

DefaultView

Позволяет получить настроенное представление для таблицы, которое может включать в себя, например, только некоторые выбранные пользователем столбцы или данные о положении курсора

MinimumCapacity

Позволяет получить или установить исходное количество строк в таблице (по умолчанию – 25)

ParentRelations

Позволяет получить коллекцию родительских отношений для данного объекта DataTable

PrimaryKey

Позволяет получить или установить массив столбцов, которые являются первичным ключом в таблице

Rows

Возвращает набор строк, относящихся к таблице

TableName

Позволяет получить имя таблицы или определить его. Значение для этого свойства может быть установлено через конструктор таблицы

Графическая схема наиболее важных компонентов DataTable представлена на рисунке 8.1. Следует обратить внимание, что схема не имеет никакого отношения к иерархии классов (к примеру, класс DataRow не является классом, производным от DataRowCollection). Эта схема представляет логические отношения «иметь» (“has-a”) между наиболее важными компонентами класса DataTable (например, объекты DataRow принадлежат к объекту DataRowCollection).

Рис. 8.1. Отношения компонентов DataTable

Наиболее важные методы DataTable представлены в таблице:

Метод

Описание

AcceptChanges()

Подтверждает все изменения, сделанные в таблице после предыдущего вызова метода

Clear()

Очищает все данные объекта DataTable

Compute(String expr, String filter)

Выполняет вычисление выражения expr в строках таблицы, удовлетворяющих фильтру filter

Copy()

Копирует структуру и данные объекта DataTable

NewRow()

Создает новую запись (объект DataRow) данной таблицы

RejectChanges()

Отменяет все изменения, сделанные после загрузки таблицы либо после последнего вызова метода AcceptChanges

Reset()

Сбрасывает объект DataTable в исходное состояние

Select()

Возвращает массив всех записей таблицы (объектов DataRow)

Select(String filter)

Возвращает массив записей таблицы (объектов DataRow), соответствующих фильтру filter