Выбрать главу

Наконец, коллекция TableMappings объектов DataTableMapping позволяет указать соответствие между таблицей источника данных и объектом DataTable.

Передача данных из источника данных в объект DataSet

Для использования объекта DataAdapter требуется, как минимум, подключение к базе данных и команда Select. Для этого можно использовать объекты Connection и Command, т.е. создать их, конфигурировать и присвоить их свойствам Connection и SelectCommand объекта DataAdapter. Однако гораздо удобнее использовать для этого конструктор объекта DataAdapter с двумя строковыми параметрами: один для команды SELECT, а второй для строки подключения, как показано ниже.

Dim da As SqlDataAdapter = New SqlDataAdapter( _

  "select * from tblDepartment" _

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

НА ЗАМЕТКУ

Учтите, что указанная в объекте SelectCommand команда SQL может иметь параметры. В главе 4, "Модель ADO.NET: провайдеры данных", приводятся основные сведения об определении этих параметров для разных провайдеров данных .NET.

Попробуем теперь вызвать метод Fill для извлечения данных из базы данных Novelty и загрузки их в объект DataSet. Для этого вернитесь к проекту DataSetCode из главы 5, "ADO.NET: объект DataSet", и выполните перечисленные ниже действия.

1. Щелкните правой кнопкой мыши на проекте DataSetCode в окне Solution Explorer и выберите в контекстном меню команду Properties, чтобы открыть диалоговое окно DataSetCode Property Pages.

2. Выберите раздел General в папке Common Properties в правой части диалогового окна DataSetCode Property Pages, а затем выберите форму frmDataSets в поле Startup object.

3. Откройте форму frmDataSets в окне конструктора формы. 

4. Создайте новую кнопку непосредственно под кнопкой Constraints, перетаскивая ее из панели элементов управления.

5. В окне свойств Properties укажите значение btnDataAdapterFill для свойства (Name) и значение DataAdapter Fill для свойства Text.

6. Для использования провайдера данных SqlClient нужно импортировать его пространство имен с помощью команды, отмеченной полужирным начертанием в следующем фрагменте кода:

Imports System

Imports System.Data

Imports System.Data.SqlClient

7. Вставьте код, показанный в листинге 6.1.

Листинг 6.1. Использование провайдера данных SqlClient для вставки данных В Набор данных dsEmployeeInfо

Private Sub btnDataAdapterFill_Click(ByVal sender As _

 System.Object, ByVal e As System.EventArgs) _

 Handles btnDataAdapterFill.Click

 ReadData()

End Sub

Private Sub ReadData()

 Dim rows As Integer

 Dim daDepartments As SqlDataAdapter = New SqlDataAdapter( _

  "select * from tblDepartment", _

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

 dsEmployeeInfo = New DataSet()

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

 DisplayDataSet(dsEmployeeInfo)

End Sub

После создания объекта daDepartments с двумя аргументами, которые содержат команду Select и строку подключения, вызывается метод Fill для наполнения данными таблицы Departments набора данных dsEmployeeInfo. Метод Fill также возвращает количество записей, которые включены (или обновлены) в набор данных dsEmployeeInfo. При выполнении метода Fill провайдером данных неявно выполняются перечисленные ниже действия.

• Для объекта SelectCommand открывается подключение к источнику данных, если оно еще не открыто.

• Выполняется команда, указанная в свойстве CommandText объекта SelectCommand (вместе с параметрами, если таковые имеются).

• Создается объект DataReader для возвращения имен полей и типов, использованных для создания нового объекта DataTable в указанном наборе данных DataSet, если этого объекта еще не существует.

• Объект DataReader используется для извлечения данных и вставки их в таблицу.

• Объект DataReader закрывается.

• Подключение к источнику данных закрывается, если оно было открыто объектом DataReader, в противном случае оно остается открытым.

НА ЗАМЕТКУ

При выполнении одной команды по отношению к источнику данных обычно проще и эффективнее создавать объекты 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()