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

Метод ExecuteScalar

Метод ExecuteScalar

Иногда нужно выполнить команду, которая возвращает скалярное значение, т.е. только одно значение. Типичными примерами являются команды SQL для вычисления суммы всех значений SUM и общего количества значений COUNT. Другими примерами являются справочные таблицы для подстановки одного значения или команды, возвращающие логическое значение. Метод ExecuteScalar выполняет заданную команду и возвращает значение первой записи из первого поля возвращенного набора записей, а все другие поля и записи игнорируются.

Включим приведенную ниже хранимую процедуру в базу данных pubs.

CREATE PROCEDURE AuthorsInState2
@param1 char(2)
AS
SELECT count(*) FROM authors WHERE state = @param1

Хранимая процедура AuthorsInState2 принимает параметр, который имеет двухсимвольный код штата, и возвращает из таблицы authors количество авторов из этого штата. Эта процедура с функциональной точки зрения эквивалентна процедуре AuthorsInState1 из листинга 4.5, но возвращает вычисленное значение для набора записей, а не только индикатор успешности выполнения команды.

НА ЗАМЕТКУ

Использование метода ExecuteScalar вместо метода ЕxecuteNonQuerу и передача скалярного значения с помощью параметра ReturnValue связаны с дополнительными накладными расходами. Зачем же его используют? Он проще в употреблении, потому что не нужно заботиться об указании параметров в определениях и вызовах команд.

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

1. Создайте дополнительную кнопку под текстовым полем txtParam1.

2. В окне свойств Properties укажите значение cmdScalar для свойства (Name) и значение ExecuteScalar для свойства Text.

3. Создайте код подпрограммы btnExecuteScalar_Click, приведенный в листинге 4.7.

Листинг 4.7. Код извлечения скалярного значения из хранимой процедуры с помощью провайдера данных ODBC

Private Sub btnExecuteScalar_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles btnExecuteScalar.Click
 Dim result As Integer
 ' Создание экземпляра объекта Connection.
 Dim cnn As OdbcConnection = New OdbcConnection( _
 "DRIVER={SQL Server};server=localhost;uid=sa;database=pubs")
 ' Создание экземпляра объекта Command.
 Dim cmd As OdbcCommand = New OdbcCommand()
 txtResults.Clear()
 ' Указание подключения и текста команды.
 cmd.Connection = cnn
 cmd.CommandType = CommandType.StoredProcedure
 cmd.CommandText = "{call AuthorsInState2(?) }"
 ' Создание параметра и указание его значения
 cmd.Parameters.Add("@param1", OdbcType.Char, 2)
 cmd.Parameters("@param1").Value = txtParam1.Text
 ' Открытие подключения перед вызовом метода
 ExecuteReader. cnn.Open()
 result = cmd.ExecuteScalar()
 MessageBox.Show("Count is " & result, "DataProviderObjects")
 cnn.Close()
End Sub

Запустите приложение и введите в текстовом поле над кнопкой ExecuteScalar двухсимвольный код штата. После щелчка на кнопке ExecuteScalar появится диалоговое окно с сообщением о количестве авторов в данном штате. Полученный результат можно проверить с помощью программы SQL Server Enterprise Manager, просматривая данные в таблице authors в базе данных pubs.

НА ЗАМЕТКУ

Учтите, что по умолчанию база данных pubs содержит двух авторов из штата Юта (код UТ) и 15 авторов из штата Калифорния (код СА).

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


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