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

Определение схемы объекта DataTable

Определение схемы объекта DataTable

Для иллюстрации основных принципов работы следует создать простую форму с помощью перечисленных ниже действий.

1. Запустите интегрированную среду разработки приложений Visual Studio .NET.

2. Создайте новый проект Visual Basic Windows Application. Для этого в диалоговом окне New Project (Новый проект) выберите тип проекта Visual Basic Project в области Project Types (Типы проектов), а затем шаблон Windows Application (Приложение Windows) в области Templates (Шаблоны).

3. Назовите проект DataSetCode.

4. Укажите путь к файлам проекта.

5. Увеличьте размер формы Form1.

6. В окне Properties укажите значение frmDataSets для свойства (Name) и значение DataSets для свойства Text формы Form1.

7. В верхнем левом углу формы создайте кнопку, перетаскивая ее из панели элементов управления.

8. В окне Properties укажите значение btnCreateDS для свойства (Name) и значение Create DataSet для свойства Text этой кнопки.

9. В правой части формы создайте поле со списком, перетаскивая его из панели элементов управления.

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 уже наверняка знакомы тем, кто имеет опыт создания приложений для работы с базами данных.

Присвоение свойству Readonly значения True указывает на то, что значение поля нельзя изменить.

Присвоение свойству Unique значения True указывает на то, что значения данного поля во всех записях таблицы должны быть уникальными. Это свойство реализуется с помощью автоматического создания ограничения UniqueConstraint для данного поля. Этот способ более подробно рассматривается в разделе об ограничениях таблицы далее в главе.

Присвоение свойству AllowDBNull значения True указывает на то, что в данном поле допускается использование неопределенных значений.

Присвоение свойству AutoIncrement значения True указывает на то, что значение поля увеличивается при каждом добавлении в таблицу новой записи. Для указания начального значения и приращения используются свойства AutoIncrementSeed и AutoIncrementStep.

НА ЗАМЕТКУ

Объект DataTable принимает новую запись и присваивает автоматически увеличенное значение для поля, свойство которого AutoIncrement имеет значение True, только если значение поля отличается от принимаемого по умолчанию.

Среди других свойств объекта DataColumn следует отметить MaxLength (для полей с данными типа String), DefaultValue и Table. Поле также можно определить с выражением для вычисления значения, создания итогового поля или фильтрования строк. Такое выражение может состоять из имен полей текущей записи или других записей, констант, операторов, символов подстановки, итоговых и других функций. Более подробную информацию и примеры таких выражений можно найти в справочных материалах для свойства Expression объекта DataColumn.

Оглавление книги


Генерация: 1.337. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз