Сначала следует организовать отправку XML-файла с перечнем товаров на складах. Для этого должны быть посланы сведения из всех полей таблицы tblInventory, за исключением поля WholesalePrice. Хотя это можно организовать с помощью простого запроса, который включает все поля, кроме WholesalePrice, в данном примере используется способ на основе XML-свойств. Для создаваемого XML-файл существует еще одно требование: в него необходимо включить XSD-схему с описанием всех полей как элементов, за исключением поля ID, которое передается с помощью атрибута.
Для создания этого приложения выполните перечисленные ниже действия.
1. Запустите интегрированную среду разработки Visual Studio .NET и создайте новый проект Visual Basic Windows Application. Для этого в диалоговом окне New Project (Новый проект) выберите тип проекта Visual Basic Project в области Project Types (Типы проектов), а затем шаблон Windows Application (Приложение Windows) в области Templates (Шаблоны).
2. Назовите проект BusinessCaseIO.
3. Укажите путь к файлам проекта.
4. Увеличьте размер формы Form1.
5. В окне свойств Properties укажите значение frmPrepareXML для свойства (Name) и значение Prepare XML для свойства Text формы Form1.
6. В верхнем левом углу формы создайте кнопку, перетаскивая ее из панели элементов управления.
7. В окне свойств Properties укажите значение btnInventory для свойства (Name) и значение Create Inventory XML для свойства Text этой кнопки.
В верхней части файла введите следующий код:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Затем в определении класса формы frmPrepareXML введите приведенный ниже код.
Dim en As New SqlConnection _
("data source=localhost;initial catalog=Novelty;user id=sa")
Private Sub btnInventory_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnlnventory.Click
Dim dsInventory As New DataSet()
Dim daInventory As New SqlDataAdapter _
("select * from tblInventory ", en)
daInventory.Fill(dsInventory, "tblInventory")
' Сохранение поля ID как XML-атрибута, а не элемента
dsInventory.Tables("tblInventory").Columns("ID").ColumnMapping = _
MappingType.Attribute
' Сокрытие поля WholesalePrice в сохраненном XML-файле
dslnventory.Tables("tbllnventory").Columns _
("WholesalePrice").ColumnMapping = MappingType.Hidden
' Сохранение данных в XML-файле, включая встроенную схему.
dsInventory.WriteXml("..\Inventory.xml", XmlWriteMode.WriteSchema)
End Sub
После вставки данных в объект DataSet для формирования XML-файла используются следующие два выражение. Первое выражение указывает на то, что поле ID следует сохранить как XML-атрибут:
dsInventory.Tables("tblInventory").Columns("ID").ColumnMapping = _
MappingType.Attribute
Второе выражение указывает на сокрытие поля WholesalePrice в сохраненном XML-файле:
dslnventory.Tables("tbllnventory").Columns _
("WholesalePrice").ColumnMapping = MappingType.Hidden
Наконец, во время сохранения данных используется второй параметр метода WriteXML, который указывает на необходимость включения XSD-схемы вместе с данными. Полученный в результате XML-файл показан в листинге 10.8.
Листинг 10.8. Пример сохранения таблицы tblInventory в виде XML-файла
Rubber Chicken
2.99
The quintessential rubber chicken.
Joy Buzzer
9.99
They will get a real shock out of this.
Seltzer Bottle
15.24
Seltzer sold separately.
Ant Farm
14.99
Watch ants where they live and breed.
Wind-Up Robot
29.99
Giant robot: attack toybox!
Rubber Eyeballs
0.99
Peek-a-boo!
Doggy Mess
1.99
Yechhh!
Mini-Camera
9.99
For future spies!
Glow Worms
1.99
Makes them easy to find
Insect Pops
0.99
Special treats
Alien Alarm Clock
45.99
Do you know what time it is out there?
Cinnamon Toothpicks
1.99
Really wakes up your mouth
Для составления ведомости на выдачу заработной платы сотрудникам компании нужно создать код сохранения информации о сотрудниках в формате XML для каждого отдела. Для этого разработчик базы данных должен включить в форму frmPrepareXML вторую кнопку btnEmployees и вставить в код класса формы frmPrepareXML код из листинга 10.9.
Листинг 10.9. Код сохранения данных из таблиц tblEmployee и tblDepartment в XML-файле
Private Sub btnEmployees_Click (ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnEmployees.Click
Dim dsEmployees As New DataSet()
Dim daEmployees As New SqlDataAdapter _
("select * from tblEmployee", en)
Dim daDepartments As New SqlDataAdapter _
("select * from tblDepartment", en)
daDepartments.Fill(dsEmployees,"tblDepartment")
daEmployees.Fill(dsEmployees, "tblEmployee")
' Определение отношения между таблицами.
dsEmployees.Relations.Add("DepartmentEmployees", _
dsEmployees.Tables("tblDepartment").Columns("ID"), _
dsEmployees.Tables("tblEmployee").Columns("DepartmentID"))
Читать дальше