НА ЗАМЕТКУ

Кроме способов использования объекта DataReader, в этом примере демонстрируются и другие функциональные возможности. Например, здесь помимо членов Text и StoredProcedure свойства-перечисления CommandType для указания типа команды используется член TableDirect. Он содержит имя таблицы, все поля которой возвращаются данной командой. Учтите, что этот член перечисления поддерживается только для провайдера данных ODBC.

Представления обычно обрабатываются точно также, как и таблицы. Следовательно, при использовании члена TableDirect свойства-перечисления CommandType можно указывать не только имя таблицы, но и имя представления.

Листинг 4.8. Код создания объекта DataReader и извлечения значений полей с помощью представления и члена TableDirect

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

 ByVal e As System.EventArgs) Handles btnExecuteReader.Click

 ' Создание экземпляра объекта Connection.

 Dim cnn As OleDbConnection = New OleDbConnection( _

  "provider=SQLOLEDB;server=localhost;uid=sa;database=pubs")

 ' Создание экземпляра объекта Command.

 Dim As OleDbCommand = New OleDbCommand()

 txtResults.Clear()

 ' Указание подключения и текста команды

 cmd.Connection = cnn

 cmd.CommandType = CommandType.TableDirect

 cmd.CommandText = "EmployeeJobs_View"

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

 ExecuteReader. cnn.Open()

 Dim reader As OleDbDataReader

 reader = cmd.ExecuteReader{)

 While reader.Read()

  txtResults.Text = txtResults.Text & reader("fname") & _

   ControlChars.Tab & reader("lname") & _

   ControlChars.Tab & ControlChars.Tab & _

   reader("job_desc") & ControlChars.CrLf

 End While

 reader.Close()

 cnn.Close()

End Sub

(Здесь предполагается, что представление EmployeeJobs_view уже создано с помощью подпрограммы btnNonQuery_Click из листинга 4.4, как описано выше. – Прим. ред.)

НА ЗАМЕТКУ

Перед попыткой доступа к данным объекта DataReader не забывайте вызывать метод Read(). В отличие от объекта Recordset в модели ADO 2.X, в которой после загрузки данных текущее расположение автоматически находится на первой записи, в модели ADO.NET в объекте DataReader нужно явно указать текущее расположение возле первой записи с помощью исходного вызова метода

Для организации доступа к данным можно также применить цикл While с более эффективными строго типизированными методами доступа к полям.

While reader. Read()

 txtResults.Text = txtResults.Text & reader.GetString(1) & _

  ControlChars.Tab & reader.GetString(2) & _

  ControlChars.Tab & ControlChars.Tab & _

  reader. GetString(0) & ControlChars.Ctrlf

End While

Еще одно изменение, которое диктуется личным вкусом и стилем программирования автора, заключается в объединении определения объекта DataReader и выполнения метода ExecuteReader в одной строке, т.е. вместо фрагмента кода

Dim reader As OleDbDataReader reader = cmd.ExecuteReader()

можно использовать следующую строку:

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

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