- •Лабораторная работа №6. Доступ к данным с помощью технологии ado.Net
- •1. Цель работы
- •2. Сведения из теории
- •2.1. Типы пространства имен System.Data
- •2.5. Возможности класса DataSet
- •2.6. Класс DataRelation
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •3.2.1. Обновление содержимого главного окна приложения
- •3.2.2. Добавление нового контакта
- •3.2.3. Добавление номера телефона
- •3.2.4. Выбор записей в таблицах
- •3.2.5. Редактирование записей таблицы Contacts
- •3.2.6. Изменение номера телефона
- •3.2.7. Удаление записей таблицы Contacts
- •If (MessageBox.Show("Вы действительно хотите удалить
- •3.2.8. Удаление номера телефона
- •If (MessageBox.Show("Вы действительно хотите удалить
- •3.2.9. Фильтрация данных
- •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 |