Рейтинговые книги
Читем онлайн Обработка баз данных на Visual Basic®.NET - Джеффри Мак-Манус

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 41 42 43 44 45 46 47 48 49 ... 88

• Объект DataRow представляет одну запись объекта DataTable и используется для добавления, извлечения и изменения данных в объекте DataTable. С его помощью можно осуществлять последовательный или непосредственный доступ к нужным записям объекта DataTable.

• Объект DataRelation определяет отношение между двумя таблицами объекта DataSet. Он представляет классическое отношение между родительской и дочерней таблицей (т.е. между ключевым и внешним полями двух таблиц). Переходы между отношениями выполняются с помощью коллекций ChildRelations и ParentRelations (объектов DataRelation) объекта DataTable.

• Объект Constraint определяет правило, согласно которому поддерживается целостность данных в объекте DataTable. Он содержит уже знакомое ограничение UniqueConstraint, гарантирующее уникальность значений таблицы, а также ограничение ForeignKeyConstraint, определяющее действия по ношению к строкам в связанной таблице. Ограничение может относиться к одному или нескольким объектам DataColumn. Каждый объект DataTable имеет свойство Constraint с коллекцией ограничений для данной таблицы.

Ввод данных в объект DataSet

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

1. Программирование определений метаданных и прямая вставка данных.

2. Использование объекта DataAdapter для создания запроса по отношению к источнику данных.

3. Загрузка XML-документа.

В этой главе представлен первый из перечисленных выше способов, в главе 6, "ADO.NET: объект DataAdapter", — второй, а в главе 10, "ADO.NET и XML", — третий. Этот раздел начинается с описания базовых функций объектов DataSet и DataTable.

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

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

1 ... 41 42 43 44 45 46 47 48 49 ... 88
На этой странице вы можете бесплатно читать книгу Обработка баз данных на Visual Basic®.NET - Джеффри Мак-Манус бесплатно.

Оставить комментарий