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

на главную

Жанры

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

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

Шрифт:

 Dim param As SqlParameter

 If conn.State = ConnectionState.Closed Then

conn.Open

 End If

 ' Создание нового объекта DataAdapter.

 Dim SQL As String SQL = "Select FirstName, LastName, Department ID, Salary, _

ID from tblEmployee"

 daEmployees = New SqlDataAdapter(SQL, conn)

' Создание команды с помощью SqlCommandBuilder.

 cbEmployees = New SqlCommandBuilder(daEmployees)

End Sub

Основная

подпрограмма LoadCommandBuilder вызывается после щелчка на кнопке Load. Она демонстрирует способ явного открытия подключения, возможность избежать возникновения исключительных ситуаций при нескольких последовательных щелчках на кнопке Load и конфигурирование адаптера данных SqlDataAdapter (объект daEmployees) и конструктора команд SqlCommandBuilder (объект cbEmployees). Эти два объекта создаются и инициализируются с помощью их конструкторов, которые принимают значения своих свойств в качестве параметров. Конструктор объекта daEmployees получает строку с командой SELECT и объект подключения, а объект cbEmployees — адаптер данных daEmployees.

НА ЗАМЕТКУ

Только один объект SqlDataAdapter может быть связан только с одним объектом SqlCommandBuilder.

Далее конфигурируется объект-сетка, вызывается метод Fill для загрузки таблицы Employees в объект daEmployees, задается таблица Employees для свойства DataSource объекта daEmployees и автоматически отображаются данные в сетке.

Обработчик события щелчка на кнопке Update содержит только одну строку кода, которая просто вызывает метод Update для объекта daEmployees.

Скомпонуйте проект DataSetCode и щелкните на кнопке DataAdapter Updates в форме frmDataSets. После отображения на экране формы frmUpdates щелкните на кнопке Load. Это приведет к считыванию данных из таблицы Employees, загрузке данных в объект tblEmployees объекта dsEmployeeInfo и отображению их в сетке, как показано на рис. 6.2.

Теперь можно протестировать работу этой формы, внося в данные произвольные изменения. Например, добавьте в сетку новые записи, прокручивая ее вниз и вводя новые данные в последней пустой строке сетки. Удалите несколько строк, выделяя их и нажимая клавишу <Delete>. Измените значения некоторых данных в уже имеющихся записях. Учтите, что все эти изменения не будут отражены в базе данных до тех пор, пока пользователь не щелкнет на кнопке Update. Внесенные в базу данных изменения можно проверить, используя любые инструменты просмотра таблиц базы данных или щелкая на кнопке Load для повторной загрузки данных из таблиц базы данных в объект grdDataGrid формы frmUpdates. 

РИС. 6.2. Отображение данных из таблицы tblEmployees в сетке grdDataGrid

НА ЗАМЕТКУ

Хотя использование объекта CommandBuilder для генерации команд обновления требует минимального количества кода, оно связано со значительными накладными расходами. Дело в том, что объект CommandBuilder должен выполнить дополнительное обращение к серверу базы данных для извлечения метаданных, которые необходимы для автоматической генерации команд обновления. Эта возможность очень полезна и позволяет создавать запросы "на лету". Однако, если запросы уже известны во время создания приложения, явное указание команд и их параметров в коде и использование явных команд обновления или программы-мастера DataAdapter Configuration Wizard приведет к повышению производительности.

Явное указание команд обновления

В отличие от довольно простого способа генерации

нужных команд обновления с помощью объекта CommandBuilder, явное указание команд обновления в коде представляет собой хотя и более гибкий, но весьма трудоемкий способ. При его использовании каждая из четырех команд управления данными (Select, Insert, Update и Delete) должна быть создана отдельно. Чаще всего они кодируются в виде хранимой процедуры для каждой команды SQL.

В листинге 6.4 представлен сценарий SQL Server для генерации четырех хранимых процедур. Хранимая процедура SelectEmployees просто выбирает все поля таблицы tblEmployee. Хранимая процедура InsertEmployee принимает четыре параметра, т.е. по одному для каждого обновляемого поля. Хранимая процедура UpdateEmployee принимает те же четыре параметра для обновляемых полей и еще один параметр для исходного значения идентификационного поля, которое используется в предложении WHERE для выбора обновляемой записи (на основании первичного ключа). Хранимая процедура DeleteEmployee принимает исходное значение идентификационного поля для удаления указанной записи.

Листинг 6.4. Сценарий SQL Server для создания хранимых процедур для таблицы tblEmployee

IF EXISTS (SELECT * FROM sysobjects WHERE name =

 'SelectEmployees' AND user__ name(uid) = 'dbo'

 DROP PROCEDURE [dbo].[SelectEmployees]

GO

CREATE PROCEDURE [dbo].[SelectEmployees]

AS

 SET NOCOUNT ON;

 SELECT FirstName, LastName, DepartmentID, Salary, ID FROM

 tblEmployee

GO

IF EXISTS (SELECT * FROM sysobjects WHERE name =

 'InsertEmployee' AND user_name(uid) = 'dbo'

 DROP PROCEDURE [dbo].[InsertEmployee]

GO

CREATE PROCEDURE [dbo].[InsertEmployee] (

 @FirstName varchar(50),

 @LastName varchar(70),

 @DepartmentID int,

 @Salary money

)

AS

 SET NOCOUNT ON;

 SELECT INTO tblEmployee(FirstName, LastName, DepartmentID, Salary)

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

GO

IF EXISTS (SELECT * FROM sysobjects WHERE name =

 'UpdateEmployee' and user_name(uid) = 'dbo'

 DROP PROCEDURE [dbo].[UpdateEmployee]

GO

CREATE PROCEDURE [dbo].[UpdateEmployee] (

 @FirstName varchar(50),

 @LastName varchar(70),

 @DepartmentID int,

 @Salary money,

 @Original_ID int

)

AS

 SET NOCOUNT ON;

 UPDATE tblEmployee SET FirstName = @FirstName, LastName = @LastName,

DepartmentID = @DepartmentID, Salary = @Salary

 WHERE (ID = @Original_ID)

GO

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

Игра топа. Революция

Вяч Павел
3. Игра топа
Фантастика:
фэнтези
7.45
рейтинг книги
Игра топа. Революция

Кровь на эполетах

Дроздов Анатолий Федорович
3. Штуцер и тесак
Фантастика:
альтернативная история
7.60
рейтинг книги
Кровь на эполетах

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон

Император поневоле

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

Восход. Солнцев. Книга V

Скабер Артемий
5. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга V

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

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

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

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Возвышение Меркурия. Книга 8

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