'ПРИМЕЧАНИЕ: Имя потока ресурса ResourceStream ЧУВСТВИТЕЛЬНО К РЕГИСТРУ,
' поэтому имя изображения должно В ТОЧНОСТИ совпадать с именем
' файла изображения, который вы добавили в проект
'-----------------------------------------------------------------------
m_myBitmapImage = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".MyImage.PNG"))
End Sub
Примеры к главе 14 (данные)
Листинг 14.1. Простой пример создания и использования объекта ADO.NET DataSet
'Объект DataSet, который мы собираемся загрузить
Private m_myDataSet As System.Data.DataSet
'Константы, которые будут использоваться
Const FILE_EMPTY_DATASET As String = "EmptyDataSet.xml"
Const FILE_1TABLE_DATASET As String = "1TableDataSet.xml"
Const dividerLine As String = _
"-----------------------------" + vbCrLf
'-------------------------------------------------------
'Загрузить содержимое файла и присоединить его к тексту,
'содержащемуся в элементе управления textBox1
'-------------------------------------------------------
Private Sub addFileContentsToTextBox(ByVal fileName As String)
'Открыть файл и считать его содержимое
Dim myStreamReader As System.IO.StreamReader
myStreamReader = System.IO.File.OpenText(fileName)
Dim fileText As String = myStreamReader.ReadToEnd()
'Закрыть файл
myStreamReader.Close()
'Присоединить содержимое к тексту, находящемуся в текстовом окне
TextBox1.Text = TextBox1.Text + _
dividerLine + "FILE: '" + fileName + "'" + vbCrLf + _
dividerLine + fileText + vbCrLf
End Sub
'--------------------------------------------------------
'1. Создает набор данных,
' сохраняет набор данных в виде XML,
' отображает результаты в текстовом окне
'2. Добавляет таблицу данных в набор данных,
' добавляет два типизированных столбца в таблицу данных,
' добавляет две строки в таблицу данных,
' сохраняет набор данных в виде XML,
' отображает результаты в текстовом окне
'--------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Очистить текстовое окно от содержимого
TextBox1.Text = ""
'===========================================
'1. Создать новый набор данных
'===========================================
m_myDataSet = New System.Data.DataSet("HelloWorld-DataSet")
'Записать содержимое ADO.NET DataSet в виде XML и отобразить
'файл в текстовом окне
m_myDataSet.WriteXml(FILE_EMPTY_DATASET)
addFileContentsToTextBox(FILE_EMPTY_DATASET)
'==================================================
'2. Добавить таблицу данных в набор данных ADO.NET,
' а также 2 строки данных в таблицу данных
'==================================================
Dim myTestTable As System.Data.DataTable
myTestTable = m_myDataSet.Tables.Add("TestTable")
'----------------------------
'Добавить 2 столбца в таблицу
'----------------------------
'Добавить столбец данных в таблицу DataTable набора DataSet
myTestTable.Columns.Add("TestColumn0", _
GetType(System.DateTime))
'Добавить строковый столбец в таблицу DataTable набора DataSet
myTestTable.Columns.Add("TestColumn1", GetType(String))
'--------------------------------
'Добавить строки данных в таблицу
'--------------------------------
'Добавить строку данных в таблицу данных
Dim rowOfData() As Object
ReDim rowOfData(1)
'Столбец 0 - это тип данных
rowOfData(0) = System.DateTime.Today
'Столбец 1 — это строковый тип
rowOfData(1) = "а string of data today"
myTestTable.Rows.Add(rowOfData)
'Добавить вторую строку данных в таблицу данных
Dim rowOfData2() As Object
ReDim rowOfData2(1) 'Столбец 0 — это тип данных
rowOfData2(0) = System.DateTime.Today.AddDays(1)
'Столбец 1 — это строковый тип
rowOfData2(1) = "tomorrow's string"
myTestTable.Rows.Add(rowOfData2)
'Записать содержимое набора ADO.NET DataSet в виде XML и отобразить
'файл в текстовом окне
m_myDataSet.WriteXml(FILE_1TABLE_ DATASET)
addFileContentsToTextBox(FILE_1TABLE_DATASET)
End Sub
Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
'-----------------------------------------------------------------------
'Необходимость в этой функции возникает по той причине, что .NET Compact
'Framework не поддерживает перегрузку:
' "public voidWriteXml(string, XmlWriteMode);"
'
'в качестве функции-члена "public" (только "private")
'-----------------------------------------------------------------------
Sub writeDataSetToFile(ByVal ds As System.Data.DataSet, _
ByVal filename As String, _
ByVal xmlWriteMode As System.Data.XmlWriteMode)
'Создать объект XmlWriter для записи наших XML-данных
Dim xmlWriter As System.Xml.XmlWriter
xmlWriter = New System.Xml.XmlTextWriter(filename, _
System.Text.Encoding.Default)
'ПРИМЕЧАНИЕ: Эта перегруженная версия не является общедоступной (public)!
'ds.WriteXml(filename, xmlWriteMode)
'Вместо этого используем следующую функцию:
ds.WriteXml(xmlWiiter, xmlWriteMode)
xmlWriter.Close() 'Важно закрыть файл!
End Sub
Листинг 14.3. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSet
Private m_myDataSet As System.Data.DataSet 'Набор данных для тестирования
'Индексы столбцов и таблицы, подлежащие кэшированию
Private m_indexesLookedUp As Boolean = False
Private Const INVALID_INDEX As Integer = -1
Private m_IndexOfTestColumn_CreditCard _
As Integer = INVALID_INDEX
Private m_IndexOfTestColumn_TravelDate _
As Integer = INVALID_INDEX
Private m_IndexOfTestTable As Integer = INVALID_INDEX
'Столбцы данных и таблица, подлежащих кэшированию
Private m_TestColumn_CreditCard As System.Data.DataColumn
Private m_TestColumn_TravelDate As System.Data.DataColumn
Private m_TableCustomerInfo As System.Data.DataTable
Public Enum testType '3 вида тестов, которые мы можем выполнять
textColumnLookup
cachedIndexLookup
cachedColumnObject
End Enum
'Эти константы определяют размерные характеристики тестов
Const DUMMY_ROWS_OF_DATA As Integer = 100
Const NUMBER_TEST_ITERATIONS As Integer = 500
'Табличная информация
Const TABLE_NAME_PASSENGERINFO As String = "CustomerTravelInfo"
Const COLUMN_NAME_DATE_OF_TRAVEL As String = "DateOfTravel"
Const COLUMN_NAME_PASSENGER_NAME As String = "PassengerName"
Const COLUMN_NAME_PASSENGER_CREDIT_CARD As String = _
"PassengerCreditCard"
Const TEST_CREDIT_CARD As String = "IvoCard-987-654-321-000"
'--------------------
'Создает набор данных
'--------------------
Private Sub createDataSet()
'1. Создать новый объект DataSet
m_myDataSet = New System.Data.DataSet("TravelService Dataset")
'2. Добавить объект DataTable в объект ADO.NET DataSet
Dim myTestTable As System.Data.DataTable
myTestTable = m_myDataSet.Tables.Add(TABLE_NAME_PASSENGERINFO)
'Добавить 2 столбца в таблицу
'Добавить столбец данных в таблицу DataTable набора данных DataSet
myTestTable.Columns.Add(COLUMN_NAME_DATE_OF_TRAVEL, _
GetType(System.DateTime))
'Добавить столбец строк в таблицу DataTable набора данных DataSet
myTestTable.Columns.Add(COLUMN_NAME_PASSENGER_NAME, _
GetType(String))
'Добавить столбец строк в таблицу DataTable набора данных DataSet
myTestTable.Columns.Add(COLUMN_NAME_PASSENGER_CREDIT_CARD, _
GetType(String))
'Данные для размещения в строках данных
Dim objArray() As Object ReDim objArray(2)
'--------------------------------
'Добавить строки данных в таблицу
'--------------------------------
Dim buildTestString As System.Text.StringBuilder
buildTestString = New System.Text.StringBuilder
Dim addItemsCount As Integer
For addItemsCount = 1 To DUMMY_ROWS_OF_DATA
'Выбрать день отъезда пассажира
objArray(0) = System.DateTime.Today.AddDays(addItemsCount)
'Выбрать имя пассажира
buildTestString.Length = 0
buildTestString.Append("TestPersonName")
buildTestString.Append(addItemsCount)
objArray(1) = buildTestString.ToString()
'Связать с пассажиром текстовый номер кредитной карточки
buildTestString.Length = 0
buildTestString.Append("IvoCard-000-000-0000-")
buildTestString.Append(addItemsCount)
objArray(2) = buildTestString.ToString()
'Добавить элементы массива в строку набора данных
myTestTable.Rows.Add(objArray)
Next
'Добавить элемент, поиск которого мы хотим проводить при выполнении теста
objArray(0) = System.DateTime.Today
objArray(1) = "Ms. TestPerson"
objArray(2) = ТЕST_CREDIT_CARD
'Добавить элементы массива в строку набора данных