Else
MessageBox.Show("Command execution failed")
' MessageBox.Show("Команда не выполнена")
End If
cnn.Close()
End Sub
После запуска полученного приложения и щелчка на кнопке ExecuteNonQuery сначала появится диалоговое окно с сообщением об успешном выполнении команды. Правильность выполнения команды можно проверить, просматривая список таблиц базы данных pubs в диалоговом окне Server Explorer интегрированной среды разработки Visual Studio .NET (которое описывается в главе 1, "Основы построения баз данных") или в программе SQL Server Enterprise Manager (которая рассматривается в главе 3, "Знакомство с SQL Server 2000").
При повторном щелчке на кнопке ExecuteNonQuery появятся два диалоговых окна с сообщениями: одно с сообщением о возникшей исключительной ситуации (оно создается блоком обработки исключительных ситуаций try-catch), а другое — о неудачном выполнении команды.
Аналогичным способом можно создать представление или хранимую процедуру. Для создания представления EmployeeJobs_view, которое возвращает отсортированный по должностям перечень сотрудников с указанием их имен, фамилий и должностей, замените команду SQL в листинге 4.4 приведенной ниже командой.
sql = "CREATE VIEW EmployeeJobs_view AS" & _
"SELECT TOP 100 PERCENT jobs. job_desc," & _
"employee.fname, employee.lname" &_
"FROM jobs INNER JOIN" & _
"employee ON jobs. job_id = employee. job_id &_
"ORDER BY jobs.job_desc"
НА ЗАМЕТКУ
Для включения предложения ORDER BY в определение представления с сортировкой результатов нужно включить в команду SELECT предложение ТОР.
Для создания хранимой процедуры, которая принимает один параметр и возвращает значение, нужно изменить эту команду SQL, как показано в листинге 4.5.
Листинг 4.5. Код, содержащий команду SQL для создания хранимой процедуры AuthorsInState1
sql = "CREATE PROCEDURE AuthorsInState1 @State char(2)" & _
" AS declare @result int" & _
" select @result = count (*) from authors " & _
" where state = @State" &_
" return (@result)"
НА ЗАМЕТКУ
Хотя метод не возвращает записи, входные и выходные параметры, а также возвращаемые значения можно передавать или возвращать с помощью коллекции Parameters. Это более эффективный подход, чем выполнение команды, которая возвращает набор записей или скалярное значение.
Обратимся теперь ко второму типу команд SQL для управления данными, т.е. их обновления, вставки или удаления. Для этих команд обычно требуется указать параметры, особенно при работе с хранимыми процедурами.
Продолжая работу с проектом DataProviderObjects, предположим, что издательство, которое создало базу данных pubs, решило повысить авторам выраженный в процентах гонорар. Включение новой кнопки и нового текстового поля в форму позволяет главному бухгалтеру издательства повысить гонорары авторов с помощью параметра команды UPDATE. Для этого нужно выполнить перечисленные ниже действия.
1. Создайте новую кнопку под кнопкой cmdExecuteNonQuery.
2. В окне свойств Properties для этой кнопки укажите значение cmdUpdate для свойства (Name) и значение Update для свойства Text.
3. Создайте новое текстовое поле под новой кнопкой Update.
4. В окне свойств Properties для этого текстового поля укажите значение txtParam1 для свойства (Name) и значение 0 для свойства Text. Установка такого значения гарантирует, что при запуске программы и случайном нажатии кнопки Update не будет причинен ущерб данным.
5. Создайте код подпрограммы btnUpdate_Click, приведенный в листинге 4.6.
Листинг 4.6. Код обновления таблицы базы данных с помощью команды UPDATE с параметром
Private Sub btnUpdate_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnUpdate.Click
Dim result As Integer
' Создание экземпляра объекта Connection.
Dim cnn As SqlConnection = New SqlConnection(_
"server=localhost;uid=sa;database=pubs")
' Создание экземпляра объекта Command.
Dim cmd As SqlCommand = New SqlCommand()
txtResults.Clear()
' Указание подключения и текста команды.
cmd.Connection = cnn
cmd.CommandType = CommandType.Text
cmd.CommandText = "UPDATE roysched SET royalty = royalty + @param1"
' Создание параметра и указание его значения.
cmd.Parameters.Add(New SqlParameter("@param1", SqlDbType.Int))
cmd.Parameters("@param1").Direction = ParameterDirection.Input
cmd.Parameters("@param1").Value = Val(txtParam1.Text)
' Открытие подключения перед вызовом метода ExecuteReader().
cnn.Open()
result = cmd.ExecuteNonQuery()
MessageBox.Show(result & " records updated", "DataProviderObjects")
cnn.Close()
End Sub
Теперь таблицу с гонорарами авторов в базе данных pubs можно обновить, запустив приложение DataProviderObjects, задав новое значение гонорара в текстовом поле под кнопкой Update и щелкнув на этой кнопке. После этого на экране появится диалоговое окно с указанием количества охваченных записей. Этот результат можно проверить с помощью программы SQL Server Enterprise Manager, просматривая данные о гонорарах в таблице roysched до и после обновления.
Читать дальше