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

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

Жанры

Обработка баз данных на 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"))

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

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

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

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

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

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

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец