Чтение онлайн

на главную - закладки

Жанры

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:

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

Dim desiredRow As DataRow

desiredRow = dtDepartments.Rows.Find("sales")

Здесь переменной desiredRow присваивается объект DataRow с указанным значением первичного ключа или значение Nothing, если такая запись не будет найдена.

Если первичный ключ таблицы основан на нескольких полях, то соответствующие значения первичного ключа передаются в виде элементов массива (типа Object) методу Find.

' Указание первичного ключа.

Dim pk(0) As DataColumn

pk(0) = dtEmployees.Columns("FirstName")

pk(1) = dtEmployees.Columns("LastName")

dtEmployees.PrimaryKey = pk

'
Попытка поиска нужной записи.

Dim desiredRow As DataRow

Dim desiredValues (1) As Object

desiredValues(0) = "Sam"

desiredValues(1) = "Johnson"

desiredRow = dtEmployees.Rows.Find(desiredValues)

Метод Select объекта DataTable возвращает массив объектов DataRow. Возвращаемые строки могут соответствовать критерию фильтрования, порядку сортировки и/или спецификации состояния (объект DataViewRowState пространства имен System.Data).

Приведенный ниже код возвращает и отображает имена всех сотрудников с фамилией Johnson.

Dim selectedRows As DataRow

selectedRows = dtEmployees.Select("LastName = 'Johnson'")

Dim i As Integer

For i = 0 to selectedRows.GetUpperBound(0)

 MessageBox.Show(selectedRows(i)("FirstName"))

Next

Для возврата записей, отсортированных в порядке убывания, можно отредактировать строку с методом Select так, как показано ниже.

selectedRows = dtEmployees. Select ("LastName = 'Johnson'", "FirstName DESC")

Наконец, указание состояния записи в качестве аргумента метода Select позволяет извлекать записи с определенной версией данных непосредственно в процессе их редактирования. Например, для извлечения всех исходных значений записей даже после их редактирования (но еще до вызова метода AcceptChanges) следует указать значение OriginalRows перечисления DataViewRowState, как показано ниже.

selectedRows = dtEmployees.Select(Nothing, Nothing, DataViewRowState.OriginalRows)

Для отбора вновь добавленных записей с фамилией Johnson следует указать значение Added перечисления DataViewRowState, как показано ниже.

selectedRows = dtEmployees. Select ("LastName = 'Johnson'", Nothing, DataViewRowState.Added)

А если нужно отобрать вновь добавленные записи с фамилией Johnson и отсортировать их по имени, то в таком случае следует использовать приведенный ниже код.

selectedRows = dtEmployees.Select("LastName = 'Johnson'", "FirstName DESC", DataViewRowState.Added)

В табл. 5.3 приведены все возможные варианты состояния записи, которые могут быть представлены членами перечисления DataViewRowState. Упомянутые здесь изменения связаны с последней загрузкой данных или вызовом метода АcсеptChanges.

Таблица 5.3. Члены перечисления DataViewRowState 

Член Описание
Added Вновь созданные записи
CurrentRows Все
текущие записи (включая новые, измененные или неизмененные записи)
Deleted Все записи, отмеченные как удаленные
ModifiedCurrent Текущая версия измененной записи
ModifiedOriginal Исходная версия измененной записи
None Нет сведений
OriginalRows Все исходные записи, включая неизмененные и удаленные, кроме новых записей
Unchanged Все неизмененные записи 

Отношения между таблицами

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

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

Объект DataRelation выполняет две разные функции.

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

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

Продолжим работу с упомянутым ранее проектом DataSetCode.

1. Создайте новую кнопку непосредственно под кнопкой Create DataSet, перетаскивая ее из панели элементов управления.

2. В окне свойств Properties укажите значение btnCreateRelations для свойства (Name) и значение Create Relations для свойства Text.

3. Вставьте код, показанный в листинге 5.6.

Листинг 5.6. Код создания и отображения отношений между таблицами

Private Sub btnCreateRelations_Click( _

 ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnCreateRelations.Click

 Dim As DataRelation

 CreateDataSet

 ' Создание отношения между таблицами Departments и Employees.

 rel = dsEmployeeInfо.Relations.Add(_

"relDepartmentEmployees", _

dsEmployeeInfo.Tables("Departments").Columns("ID"), _

dsEmployeeInfo.Tables("Employees").Columns("DepartmentID"))

Поделиться:
Популярные книги

Мимик нового Мира 8

Северный Лис
7. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 8

Отмороженный 4.0

Гарцевич Евгений Александрович
4. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 4.0

Младший научный сотрудник 2

Тамбовский Сергей
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Младший научный сотрудник 2

Измена. Мой непрощённый

Соль Мари
2. Самойловы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Мой непрощённый

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

"Малыш"

Рам Янка
2. Девочка с придурью
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Малыш

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат

Отмороженный 3.0

Гарцевич Евгений Александрович
3. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 3.0

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

Совпадений нет

Безрукова Елена
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Совпадений нет

Сбой Системы Мимик! Академия

Северный Лис
2. Сбой Системы!
Фантастика:
боевая фантастика
юмористическая фантастика
5.71
рейтинг книги
Сбой Системы Мимик! Академия