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

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

Жанры

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

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

Шрифт:

dvRow = dsCustOrders.Tables("Customers").DefaultView(RowNum)

' Вставка в поле со списком имен полей из таблицы Customer.

lstCustomer.Items.Clear

For i = 0 To dsCustOrders.Tables("Customers").Columns.Count – 1

lstCustomer.Items.Add(dvRow.Item(i))

Next

grdOrders.CaptionText = _

"Orders for customer #" & txtCustID.Text

' Извлечение связанных дочерних записей для

' указанного клиента таблицы Customer.

dvOrders = dvRow.CreateChild("relCustOrders")

grdOrders.DataSource = dvOrders

Else

MessageBox.Show( _

"CustomerID not found – Please try again.")

' "Клиент CustomerID не найден – Попробуйте еще раз."

txtCustID.Clear

End If

 Else

Beep

 End If

End Sub

Все параметры источников данных задаются в подпрограмме frmShowOrders_Load. Затем создаются две таблицы для набора данных DataSet и отношение DataRelation между ними. Наконец, задаются значения свойств РrimaryKey и Sort для таблицы Customers и его представления по умолчанию DefaultView, чтобы для поиска записей можно было использовать метод Find.

Щелчок на кнопке Find приводит к выполнению нескольких операций, которые определены в коде подпрограммы btnFind_Click. После проверки числового типа значения в поле txtCustID начинается поиск этого значения в представлении DefaultView таблицы Customers. Если указанное значение найдено, то в поле со списком DataRowView будут показаны значения всех полей искомой записи с заданным идентификатором из таблицы Customers, а в сетке данных справа будут показаны ее дочерние записи из таблицы Orders.

Обратите внимание, что в данном примере создано отношение между двумя таблицами из баз данных совершенно разного типа!

Скомпонуйте проект BusinessCase7 и попробуйте найти родительскую запись в таблице Customers и ее дочерние записи из таблицы Orders, как показано на рис. 7.6.

РИС. 7.6. Пример представления результатов в форме frmShowOrders

НА ЗАМЕТКУ

Пусть вас не смущает, что сетка данных Orders (см. рис. 7.6) будет содержать поле с именем OrderAmount, а не поле Amount, как определено в таблице SQL Server. Дело в том, что данные о клиенте поступают из базы данных SQLServer, а данные о его заказах — из совершенно другой "унаследованной" базы данных Access типа MDB. Поэтому вполне естественно, что имена объектов в разных базах данных могут иметь различные имена.

Для исправления имени поля можно использовать приведенную ниже команду с предложением AS для изменения имени поля в данных, которые возвращаются для объекта daOrders с помощью команды SELECT.

SELECT CustomerID, ID, As Amount, OrderDate

FROM tblOrder

С течением времени необходимость комбинирования данных из разных источников будет расти, поскольку современные компании стремятся расширять круг своих партнеров и объединяются с другими компаниями, которые могут хранить и использовать свои бизнес-данные в совершенно разных форматах. В последнее время растет популярность формата XML, который позволяет очень просто и быстро переносить данные о заказах и продуктах между разными компаниями. Для объекта DataSet формат XML представляет собой еще один способ вставки данных в таблицы из разных источников данных. Более подробно способы вставки данных в объект DataSet в формате XML описываются в главе 10, "ADO.NET и XML".

Строго типизированные наборы данных

До сих пор обсуждались варианты использования нетипизированного объекта DataSet. Однако в модели ADO.NET и среде Visual Studio. NET предусмотрены способы создания типизированных объектов DataSet. Типизированный объект DataSet является производным от нетипизированного класса DataSet, но содержит объекты, методы, свойства и события, специфические для используемой схемы данных. Она определяется в файле схемы с расширением .xsd, а в среде Visual Studio .NET предусмотрены графические инструменты для генерации набора классов на основе этой схемы.

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

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

• Типизированные объекты DataColumn и DataRelation предлагаются как специализированные именованные свойства, а не универсальные элементы коллекций.

• Для типизированных объектов можно выполнять проверку типов во время компиляции.

• В редакторе кода в среде Visual Studio .NET предусмотрено использование средства IntelliSense.

• Код имеет более краткую и читабельную форму.

Например, команда указания нового значения для поля таблицы будет иметь следующий вид:

dsCustomers.tables("Customers").Rows(row)("FirstName") = NewValue

Здесь row — это индекс в коллекции записей Rows таблицы Customers, FirstName — поле таблицы Customers, a NewValue — новое присваиваемое значение. При таком кодировании нетипизированного набора данных могут возникать разные ошибки. Соответствует ли тип нового значения NewValue типу поля, которому оно присваивается? Существует ли таблица Customers? Существует ли поле FirstName? Правильно ли указано имя поля или таблицы? При этом получить сообщение об ошибке можно будет только во время выполнения приложения.

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

Лев Толстой

Труайя Анри
Проза:
историческая проза
5.00
рейтинг книги
Лев Толстой

Брошенные тела

Дивер Джеффри
Детективы:
триллеры
6.90
рейтинг книги
Брошенные тела

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.50
рейтинг книги
Гримуар темного лорда V

Волкодав

Семёнова Мария Васильевна
1. Волкодав
Фантастика:
фэнтези
героическая фантастика
9.46
рейтинг книги
Волкодав

Я еще не бог. Книга XXXV

Дрейк Сириус
35. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я еще не бог. Книга XXXV

Будущее разума

Каку Митио
Научно-образовательная:
прочая научная литература
физика
8.00
рейтинг книги
Будущее разума

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Алекс и Алекс

Афанасьев Семен
1. Алекс и Алекс
Фантастика:
боевая фантастика
6.83
рейтинг книги
Алекс и Алекс

Город костей

Уэллс Марта
Фантастика:
научная фантастика
6.25
рейтинг книги
Город костей

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Ущелье дьявола

Сандему Маргит
21. Люди Льда
Фантастика:
фэнтези
9.22
рейтинг книги
Ущелье дьявола

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Сантьяго

Резник Майкл Даймонд
Фантастика:
научная фантастика
6.25
рейтинг книги
Сантьяго

Иисус неизвестный

Мережковский Дмитрий Сергеевич
Научно-образовательная:
философия
4.00
рейтинг книги
Иисус неизвестный