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

на главную

Жанры

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

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

Шрифт:

 param.SourceColumn = "Salary"

 param.SourceVersion = DataRowVersion.Current

 param = daEmployees.UpdateCommand.Parameters.Add( _

New SqlParameter("@Original_ID, SqlDbType.Int))

 param.Direction = ParameterDirection.Input

 param.SourceColumn = "ID"

 param.SourceVersion = DataRowVersion.Original

 ' Создание специализированной

 ' хранимой
процедуры для команды Delete.

 daEmployees.DeleteCommand = New SqlCommand

 With daEmployees.DeleteCommand

.Connection = conn

.CommandType = CommandType.StoredProcedure

.CommandText = "DeleteEmployee"

 End With

 param = daEmployees.DeleteCommand.Parameters.Add(_

New SqlParameter("@Original_ID", SqlDbType.Int))

 param.Direction = ParameterDirection.Input

 param.SourceColumn = "ID"

 param.SourceVersion = DataRowVersion.Original

End Sub

НА ЗАМЕТКУ

Код присвоения значений для каждого из объектов-параметров мог быть более компактным за счет вызова другой перегруженной версии метода Add. Эта альтернативная версия принимает значения для всех необходимых свойств-параметров в одном вызове метода с длинным списком параметров.

Невзирая на большой размер, код подпрограммы LoadExplicitCode имеет очень простую и понятную структуру, если определен интерфейс (параметры и типы) для хранимых процедур. Для всех свойств объекта Command создается новый экземпляр объекта SQLCommand. Ему присваивается общий объект Connection и задаются значения свойств CommandType и CommandText. Затем нужно создать и конфигурировать все параметры каждой команды.

Скомпонуем проект DataSetCode и снова проверим работоспособность полученного приложения. Оно будет работать как и прежде, но теперь в подпрограмме LoadExplicitCode используются специализированные команды для обновления базы данных. Этот подход требует больших усилий по созданию кода, но является более гибким, предлагает более высокую производительность и централизованное управление хранимыми процедурами.

Вставка бизнес-логики в команды обновления

Прежде уже описывалось, как хранимые процедуры для специализированных команд обновления можно использовать для вставки бизнес-логики в хранимые процедуры, которые вызываются автоматически. По сравнению с прежними версиями модели ADO и другими моделями доступа к данным новизна заключается не во вставке логики в хранимые процедуры, поскольку эта функциональная возможность существовала и раньше. Дело в том, что эти хранимые процедуры вызываются автоматически при выполнении "пакетных" обновлений вместо явной организации вызовов в коде программы.

Для демонстрации этого подхода попробуем изменить хранимую процедуру. Предположим, что бизнес-логика определяется следующим образом: если при вставке новой записи о сотруднике значение зарплаты в поле Salary не определено или равно 0, то для него автоматически задается значение, определяемое функцией отдела. Для реализации этой бизнес-логики применим

очень простой механизм: автоматически присвоенное значение будет равно произведению номера отдела и значения 10000. (Конечно, в реальных условиях компания может использовать более удачный алгоритм для указания этого значения!) Измененная хранимая процедура теперь будет выглядеть так, как показано ниже.

CREATE PROCEDURE dbo.SelectEmployees (

 @FirstName varchar(50),

 @LastName varchar(70),

 @DepartmentID int,

 @Salary money)

AS

 SET NOCOUNT ON;

 if (@Salary = 0 or @Salary is null) begin

– – Вычисления

set @Salary = @DepartmentID * 1000

 end

 INSERT INTO tblEmployee (FirstName, LastName, DepartmentID, Salary) VALUES

 (@FirstName, @LastName, @DepartmentID, @Salary)

GO

НА ЗАМЕТКУ

Поскольку хранимая процедура InsertEmployee уже существует, то для ее создания в новом виде нужно удалить существующую хранимую процедуру или заменить первую строку данного сценария строкой ALTER PROCEDURE dbo.SelectEmployees. Для выполнения этого сценария можно использовать программу SQL Query Analyzer.

Теперь можно вновь запустить приложение проекта DataSetCode без внесения каких-либо изменений в его код. Попробуйте вставить в форму несколько новых записей с пустыми значениями поля Salary и проверьте работоспособность новой хранимой процедуры, т.е. корректного автоматического присвоения значений для этого поля.

Использование компонента DataAdapter во время создания приложения

После описания в предыдущем разделе способа создания кода вручную продемонстрируем метод автоматического создания кода с помощью программы-мастера Data Adapter Configuration Wizard. 

Программа-мастер Data Adapter Configuration Wizard предлагает целый набор параметров для конфигурирования объекта DataAdapter во время создания приложения. Она обладает более широкими функциональными возможностями, чем другие компоненты времени создания приложения. Она содержит графический интерфейс для управления многими внутренними объектами и свойствами компонента, а также инструменты автоматического создания кода.

1. Откройте форму frmUpdates в режиме конструктора формы.

2. Из вкладки Data выберите и перетащите в форму компонент SqlDataAdapter. Этот компонент невидим во время выполнения, поэтому он появится под формой среди других невизуальных компонентов. При этом на экране откроется первое диалоговое окно программы-мастера Data Adapter Configuration Wizard. Щелкните на кнопке Next.

3. В следующем диалоговом окне, Choose Your Data Connection (Выберите подключение к базе данных), выберите подключение к базе данных Novelty. Если оно не указано, то его следует создать, щелкнув на кнопке New Connection (Новое подключение) и указав характеристики подключения в стандартном диалоговом окне Data Link Properties (Свойства соединения с данными). После выбора подключения щелкните на кнопке Next.

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

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Метка драконов. Княжеский отбор

Максименко Анастасия
Фантастика:
фэнтези
5.50
рейтинг книги
Метка драконов. Княжеский отбор

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Ученичество. Книга 1

Понарошку Евгений
1. Государственный маг
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ученичество. Книга 1

Энфис 2

Кронос Александр
2. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 2

Не верь мне

Рам Янка
7. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Не верь мне

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

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

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6