Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Визуальное проектирование диалогового окна




Цель работы

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

 

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

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

 

Типы пространства имен 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

 

Тип 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

 

Тип 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()

 

Тип 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

Возможности класса DataSet

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

Объект DataSet – это создаваемый в оперативной памяти набор таблиц (объектов DataTable), связанных между собой отношениями и снабженными средствами проверки целостности данных (для них в DataSet предусмотрены свои объекты). Иерархия классов, входящих в DataSet, представлена на рисунке 8.2.

Рис. 8.2. Внутренние коллекции DataSet

 

Основные свойства класса DataSet представлены в таблице:

 

Свойство Описание
CaseSensitive Определяет, будет ли во время операций по сравнению текстовых строк в объектах DataTable учитываться регистр букв
DataSetName Позволяет получить или задать имя для данного объекта DataSet. Обычно значение этого свойства задается как параметр, передаваемый конструктору
EnforceConstraints Позволяет включить или отключить проверку соответствия ограничениям при выполнении операций обновления данных в DataSet
HasErrors Позволяет получить значение, определяющее наличие ошибок в DataSet (т.е. ошибок в любой строке любой таблицы DataSet)
Relations Позволяет обратиться к коллекции отношений между таблицами DataSet
Tables Позволяет получить доступ к коллекции таблиц DataSet

 

Многие методы DataSet дублируют возможности, которые обеспечиваются свойствами. Самые важные методы DataSet представлены в таблице:

 

Метод Описание
AcceptChanges() Позволяет сохранить в DataSet все изменения, произведенные с момента последнего вызова этого метода
Clear() Полная очистка DataSet – удаляются все строки из всех таблиц
Clone() Клонирует структуру DataSet, включая структуру таблиц, отношения между таблицами и ограничения
Copy() Копирует DataSet (структуру вместе с данными)
GetChanges() Возвращает копию DataSet, которая содержит все изменения, внесенные в оригинальный DataSet с момента последнего вызова для него метода AcceptChanges()
GetChildRelations() Возвращает коллекцию подчиненных отношений для указанной таблицы
GetParentRelations() Возвращает коллекцию родительских отношений для указанной таблицы
HasChanges() Этот перегруженный метод позволяет получить информацию об изменениях, внесенных в DataSet (отдельно по вставленным, удаленным и измененным строкам)
Merge() Этот перегруженный метод позволяет производить слияние разных объектов DataSet
ReadXml() ReadXmlSchema() Позволяют считывать данные в формате XML в DataSet из потока (файла, оперативной памяти, сетевого ресурса)
RejectChanges() Отменяет все изменения , внесенные в DataSet с момента его создания или последнего вызова метода AcceptChanges()
WriteXml() WriteXmlSchema() Позволяют записывать данные в формате XML из DataSet в поток

 

Класс DataRelation

После того как в DataSet появилось несколько объектов таблиц, можно определить отношения между этими таблицами. Объектно-ориентированную оболочку вокруг отношений между таблицами представляет класс DataRelation. При создании объекта этого класса необходимо указать имя отношений, а также родительскую и подчиненную таблицы. Чтобы отношение было успешно установлено, в каждой из таблиц должен быть столбец с одинаковым названием и типом данных.

Объекты DataRelation хранятся в коллекции DataRelationCollection, поддерживаемой DataSet. В типе DataRelation предусмотрены свойства, которые позволяют получать ссылки на родительскую и подчиненную таблицу, участвующую в отношении, определять имя отношения и т.п. Наиболее часто используемые свойства представлены в таблице:

Свойство Описание
ChildColumns ChildKeyConstraint ChildTable Позволяют получить информацию о подчиненной таблице, участвующей в отношении, а также ссылку на саму эту таблицу
DataSet Позволяет получить ссылку на объект DataSet, к которому принадлежит данное отношение
ParentColumns ParentKeyConstraint ParentTable Позволяют получить информацию о родительской таблице, участвующей в отношении, а также ссылку на саму эту таблицу
RelationName Позволяет получить или задать имя для данного отношения

 

Перемещение между таблицами производится при помощи методов, определенных в классе DataRow. Так, метод GetChildRows() позволяет считывать строки из подчиненной таблицы, а метод GetParentRows() – из родительской таблицы.

 

Пример выполнения работы

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

 

Визуальное проектирование диалогового окна

Внешний вид работающего приложения приведен на рисунке 8.3.

Настройки таблиц dataGridView1 и dataGridView1 приведены в описании предыдущей лабораторной работы.

Текстовые поля FamTextBox и NameTextBox используются для добавления новой записи или редактирования записи, выделенной в таблице. Для удобства редактирования при выделении строки в таблице данные об имени и фамилии человека копируются в соответствующие текстовые поля.

Рис. 8.3. Главная форма приложения

 










Последнее изменение этой страницы: 2018-06-01; просмотров: 167.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...