НА ЗАМЕТКУ

При выполнении одной команды по отношению к источнику данных обычно проще и эффективнее создавать объекты Command и Connection неявно при создании объекта DataAdapter. Однако при выполнении нескольких команд по отношению к одному источнику данных эффективнее создать объект Connection явно и затем присвоить его объекту DataAdapter. Это позволяет поддерживать подключение постоянно открытым без часто повторяющихся операций его открытия и закрытия, что снижает производительность. Эквивалентный код представлен ниже.

Private Sub ReadData()

 Dim rows As Integer

 Dim daDepartments As SqlDataAdapter

 Dim соnn As New SqlConnection (_

 "server=localhost;uid=sa;database=novelty")

 Dim cmdSelect As New SqlCommand(_

  "select * from tblDepartment")

 dsEmployeeInfо = New DataSet()

 cmdSelect.Connection = conn

 daDepartments.SelectCommand = cmdSelect

 ' Открытие подключения перед выполнением команд

 conn.Open()

 rows = daDepartments.Fill(dsEpmloyeeInfo, "Departments")

 ' Выполнение операций с базой данных.

 ' ...

 DisplayDataSet(dsEmployeeInfо)

 ' Закрытие подключения после выполнения всех команд.

 conn.Close()

End Sub

Конечно, для эффективного использования явно созданных объектов conn и cmdSelect желательно, чтобы количество операций с базой данных было достаточно большим.

Методу Fill передается ссылка на набор данных dsEmployeeInfo и имя таблицы Departments, в которую вставляются данные. Вместо имени таблицы можно было бы передать ссылку на объект DataTable. Еще один вариант указания параметров основан на передаче только ссылки на объект DataSet, а метод Fill в таком случае по умолчанию загрузит данные в объект DataTable по имени Table.

НА ЗАМЕТКУ

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

Для загрузки данных во вторую таблицу можно создать второй объект DataAdapter с другой командой Select. В данном примере для загрузки данных в таблицы Department и Employees из соответствующих таблиц базы данных нужно использовать приведенный ниже код для подпрограммы ReadData() вместо кода из листинга 6.1.

Private Sub ReadData()

 Dim rows As Integer

 Dim daDepartments As SqlDataAdapter = New SqlDataAdapter(_

  "select * from tblDepartment", _

  "server=localhost;uid=sa;database=novelty")

 Dim daEmployees As SqlDataAdapter = New SqlDataAdapter(_

  "select * from tblEmployee", _

  "server=localhost;uid=sa;database=novelty")

 dsEmployeeInfo = New DataSet()

 rows = daDepartments.Fill(dsEmployeeInfo, "Departments")

 rows = daEmployees.Fill(dsEmployeeInfo, "Employees")

 DisplayDataSet(dsEmployeeInfo)

End Sub

Скомпонуйте проект DataSetCode, щелкните на кнопке DataAdapter Fill, и в поле со списком, как и прежде, будет отображена информация о содержании набора данных dsEmployeeInfo, но теперь она извлекается из базы данных под управлением SQL Server, а не генерируется локально кодом приложения.

Для установления родительско-дочерних связей между записями в этих таблицах можно создать объект DataRelation, который служит отношением между ними.

Перейти на страницу:

Похожие книги