Чтение онлайн

на главную - закладки

Жанры

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

Прайс Кевин Т.

Шрифт:

Ниже приведен один из способов включения параметра команды за счет явного указания объекта-параметра.

Dim rayParameter As New OdbcParameter("@MyParam", OdbcType.Char, 2)

myParameter.Direction = ParameterDirection.Input

myParameter.Value = "CA"

cmd.Parameters.Add(myParameter)

А способ включения параметра команды с помощью метода Add выглядит иначе.

cmd.Parameters.Add("@MyParam", OdbcType.Char, 2)

cmd.Parameters("@MyParam").Direction = ParameterDirection.Input

cmd.Parameters("@MyParam").Value = "CA"

Второй

метод короче и обычно предпочтительнее, если только нет особой причины для повторного использования объекта Parameter.

Для метода Add объекта Parameter обычно требуется указать имя, тип и длину параметра. Затем нужно указать направление передачи данных: Input, Output, InputOutput или ReturnValue. По умолчанию используется направление Input. Наконец, для присвоения значения параметру нужно использовать свойство Value объекта Parameter. Кроме того, для параметра можно указать другие свойства, например масштаб (свойство Scale), точность (свойство Precision) и допустимость использования неопределенных значений (свойство IsNullable).

При использовании провайдера данных SqlClient можно применять практически идентичный код. Единственным отличием являются префиксы Odbc вместо префиксов Sql, а также тип перечисления SqlDbType вместо OdbcType.

Dim myParameter As New SqlParameter("@MyParam", SqlDbType.Char, 2)

myParameter.Direction = ParameterDirection.Input

myParameter.Value = "CA"

cmd.Parameters.Add(myParameter)

Аналогично выглядит способ включения параметра команды с помощью метода Add.

cmd.Parameters.Add("@MyParam", SqlDbType.Char, 2)

cmd.Parameters("@MyParam").Direction = ParameterDirection.Input

cmd.Parameters("@MyParam").Value = "CA"

СОВЕТ

Для передачи параметру неопределенного значения можно использовать свойство Value объекта DBNull.

cmd.Parameters("@MyParam").Value = DBNull.Value

Измените код кнопки cmdButton, как показано в листинге 4.3. После запуска программы и щелчка на кнопке cmdButton в текстовом поле появится текст запроса, а также имя и значение параметра.

Листинг 4.3. Код подготовки и отображения команды и ее параметров

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

 ByVal e As System.EventArgs) Handles btnCommand.Click

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

 Dim cnn As SqlConnection = New SqlConnection( _

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

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

 Dim cmd As SqlCommand = New SqlCommand

 Dim prm As SqlParameter = New SqlParameter

 txtResults.Clear

' Открытие подключения cnn.Open

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

 cmd.Connection = cnn

 cmd.CommandType = CommandType.Text

 cmd.CommandText = _

"Select au_lname, state from authors where state = @MyParam"

 '
Создание параметра и указание его значения

 cmd.Parameters.Add(New SqlParameter("@MyParam", SqlDbType.Char, 2))

 cmd.Parameters("@MyParam").Value = "CA"

 ' Вывод текста команды

 txtResults.Text = "Command String:" & ControlChars.CrLf

 txtResults.Text = txtResults.Text & ControlChars.Tab & _

cmd.CommandText & ControlChars.CrLf

 ' Вывод параметров команды

 txtResults.Text = txtResults.Text & "Command parameters:" & _

ControlChars.CrLf

 For Each prm In cmd. Parameters

txtResults.Text = txtResults.Text & ControlChars.Tab & _

prm.ParameterName & " = " & prm.Value & ControlChars.CrLf

 Next

End Sub

Аналогично вызываются хранимые процедуры, за исключением того, что вместо свойства CommandType.Text используется свойство CommandType.StoredProcedure, а имя хранимой процедуры присваивается свойству CommandText. Таким образом, код вызова хранимой процедуры GetAuthorsFromState с двухсимвольным параметром для извлечения информации обо всех авторах заданного штата будет выглядеть, как показано ниже.

cmd.CommandType = CommandType.StoredProcedure

cmd.CommandText = "GetAuthorsFromState"

cmd.Parameters.Add("@MyParam", SqlDbType.Char, 2)

cmd.Parameters("@MyParam").Direction = ParameterDirection.Input

cmd.Parameters("@MyParam").Value = "CA"

СОВЕТ

Для вызова хранимой процедуры с помощью OdbcCommand нужно использовать стандартные последовательности символов ODBC (с участием фигурных скобок), а не только имя процедуры для свойства CommandText. В качестве заменителей параметров в ODBC используются вопросительные знаки. Вот как выглядит приведенный выше для провайдера данных ODBC:

cmd.CommandType = CommandType.StoredProcedure

cmd.CommandText = "{GetAuthorsFromState ?}"

cmd.Parameters.Add("@MyParam", OdbcType.Char, 2)

cmd.Parameters("@MyParam").Direction = ParameterDirection.Input

cmd.Parameters("@MyParam").Value = "CA"

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

cmd.CommandText = "{? = GetAuthorsFromState ?}"

Чтобы хранимая процедура возвращала значение, нужно указать направление Output, а затем считать значение свойства параметра после вызова хранимой процедуры. В данном примере также определяется возвращаемое значение хранимой процедуры. Поскольку здесь указан тип Int сервера SQL Server, то для этого параметра не нужно указывать длину, так как по определению она составляет 4 байт.

cmd.Parameters.Add(New SqlParameter("result", SqlDbType.Int)

cmd. Parameters ("result").Direction = ParameterDirection.ReturnValue

Поделиться:
Популярные книги

Эффект Фостера

Аллен Селина
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Эффект Фостера

Жена моего брата

Рам Янка
1. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Жена моего брата

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Любовь Носорога

Зайцева Мария
Любовные романы:
современные любовные романы
9.11
рейтинг книги
Любовь Носорога

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Перерождение

Жгулёв Пётр Николаевич
9. Real-Rpg
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Перерождение

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Смерть может танцевать 4

Вальтер Макс
4. Безликий
Фантастика:
боевая фантастика
5.85
рейтинг книги
Смерть может танцевать 4

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Утопающий во лжи 3

Жуковский Лев
3. Утопающий во лжи
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Утопающий во лжи 3