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

ЖАНРЫ

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

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

Шрифт:

10. В окне Properties укажите значение lstOutput для свойства (Name).

11. Увеличьте размер поля со списком, чтобы оно занимало до 80% всей площади формы.

В верхней части файла введите следующий код:

Imports System

Imports System.Data

Затем в определении класса формы frmDataSets введите приведенный ниже код.

Private dsEmployeelnfo As DataSet

Private Sub btnCreateDS_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnCreateDS.Click

 CreateDataSet

 AddData

 DisplayDataSet

End Sub

Подпрограмма btnCreateDS_Click

обработки щелчков на кнопке Create DataSet вызывает три другие подпрограммы для каждой фазы работы приложения. Переменная dsEmployeelnfo является объектом DataSet, доступ к которому выполняется с помощью подпрограмм внутри подпрограммы btnCreateDS_Click.

НА ЗАМЕТКУ

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

Итак, прежде всего нужно определить схему (или структуру) всех используемых таблиц. Для этого нужно определить все объекты DataColumn таблицы и указать их свойства, как показано на примере подпрограммы CreateDataSet в листинге 5.1. 

ЛИСТИНГ 5.1. Код создания Объектов DataSet и DataTable

Private Sub CreateDataSet

 ' Создание объекта dsEmployeeInfo.

 dsEmployeelnfo = New DataSet

 ' Создание таблицы Employees.

 Dim dtEmployees As DataTable = New DataTable("Employees")

 dtEmployees.CaseSensitive = False

 dtEmployees.Columns.Add("FirstName", Type.GetType("System.String"))

 dtEmployees.Columns.Add("LastName", Type.GetType("System.String"))

 dtEmployees.Columns.Add("DepartmentID", Type.GetType("System.Int32"))

 ' Вставка таблицы Employees в объект EmployeeInfo.

 dsEmployeeInfo.Tables.Add(dtEmployees)

 ' Создание таблицы Departments с

 ' помощью перегруженной версии конструктора.

 ' Это более длительный способ при создании стандартных полей,

 ' но он позволяет задавать другие свойства полей (например, Readonly & Unique)

 ' до включения поля DataColumn в коллекцию Columns.

 Dim dtDepartments As DataTable

 dtDepartments = New DataTable

 dtDepartments.TableName = "Departments"

 dtDepartments.MinimumCapacity = 5

 dtDepartments.CaseSensitive = False

 Dim NewColumn As New DataColumn

 With NewColumn

.ColumnName = "ID"

.DataType = Type.GetType("System.Int32")

.Readonly = True

.Unique = True

.AutoIncrement = True

 End With

 dtDepartments.Columns.Add(NewColumn)

 NewColumn = New DataColumn

 With NewColumn

.ColumnName = "DepartmentName"

.DataType = Type.GetType("System.String")

.Unique = True

.AllowDBNull = False

 End With

 dtDepartments.Columns.Add(NewColumn)

 '
Включение таблицы Departments в объект dsEmployeeInfo.

 dsEmployeeInfo.Tables.Add(dtDepartments)

End Sub

После создания экземпляра dsEmployeeInfo объекта DataSet создается таблица Employees с помощью перегруженных конструкторов объекта DataTable с использованием параметра – имени таблицы. Затем задается значение False для свойства CaseSensitivity объекта DataTable. Это свойство определяет, будут ли операции сортировки, поиска и фильтрации выполняться с учетом регистра символов. По умолчанию значение этого свойства определяется как значение свойства CaseSensitivity родительского объекта DataSet или принимается равным False, если объект DataTable создан независимо от объекта DataSet.

НА ЗАМЕТКУ

Свойство CaseSensitivity применяется только для данных объекта DataTable и не влияет на имена самих объектов DataTable. Например, объект DataSet может иметь две таблицы (или отношения) с именами или mytable или Mytable. Для работы с ними нужно записывать имена с точным указанием регистра символов, поскольку их поиск ведется с учетом регистра (case-sensitive search). Однако это не обязательно при наличии только одной таблицы с таким именем, поскольку при этом используется поиск без учета регистра (case-insensitive search).

Затем создаются определения полей с помощью метода Add объекта Column по указанному имени поля и типу данных. Учтите, что здесь указываются .NET-совместимые типы данных, а не используемые в базе данных типы. При отсутствии типа данных для него по умолчанию принимается строковый тип. Наконец, таблица Employee включается в объект dsEmployeeInfo.

Далее этот процесс повторяется для таблицы Departments, но теперь уже с перегруженными конструкторами и функциями. Таким образом та же цель достигается другим способом. Разработчик может самостоятельно выбрать наиболее подходящий способ на основе собственного вкуса, корпоративных стандартов или особенностей поставленной задачи.

Для свойства MinimumCapacity объекта dtDepartments задается значение 5, т.е. экземпляр объекта DataTable создается уже с пятью записями. Указание для него другого значения (отличного от используемого по умолчанию значения 25) позволяет управлять выделением ресурсов и оптимизировать производительность в критических ситуациях. Конечно, на самом деле эти пять записей фактически появятся только после того, как пользователь добавит их в таблицу DataTable, а пока для них резервируется место.

Кроме того, перед добавлением полей в коллекцию Columns для них задаются значения других свойств. Перечисленные ниже свойства Readonly, Unique, AllowDBNull и AutoIncrement уже наверняка знакомы тем, кто имеет опыт создания приложений для работы с базами данных.

Поделиться с друзьями: