ПОНЯТНО О Visual Basic NET (том 3)

       

Создаем OleDbConnection, OleDbDataAdapter и DataSet


Теория. Для работы с базами данных по новейшей технологии ADO.NET мы будем использовать три класса: OleDbConnection (соединение), OleDbDataAdapter (адаптер) и DataSet. Каждый из них берет на себя часть забот по обеспечению этой работы.

Что означает работа с базой данных? В каком-то файле на вашем или на другом компьютере расположена база данных. Вот вы решили с ней поработать. Для этого нужно сначала с ней соединиться. Этим занимается объект OleDbConnection. Мы уже пользовались им при соединении, не подозревая об этом.

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

Работу на своем компьютере с перекачанной частью базы данных вы осуществляете с помощью объекта DataSet. Можно сказать, что он представляет из себя перекачанную часть базы данных. Заботу же о перекачке информации с исходной базы к вам в DataSet и обратно берет на себя OleDbDataAdapter. Его метод Fill применяется для загрузки данных из исходной базы в DataSet, а метод Update – наоборот – для перекачки изменений из DataSet  в исходную базу.

Если файл базы данных находится не далеко, а на вашем компьютере, то это ничего не меняет, просто канал связи от объекта DataSet, находящегося в оперативной памяти, до исходной базы данных, находящейся на диске окажется коротким.


Создаем OleDbConnection и OleDbDataAdapter. Итак, у нас где-то есть заполненная (или даже с пустой таблицей) база данных «Контакт». Теперь посмотрим, как с ней можно работать непосредственно изнутри проекта.

Создайте проект. Соедините среду VS с базой данных «Контакт» при помощи Server Explorer, как мы это делали в 24.4.1. Соединили? А теперь перетащите мышкой значок таблицы «Книги» из окна Server Explorer на форму вашего проекта. VB может задать вам вопрос о пароле (password). Отвечайте  Don't include password. Вы увидите, что в ваш проект добавились два объекта: OleDbConnection1 и OleDbDataAdapter1 (вы можете видеть их под формой на Рис. 24.23).

Внимание! Если у вашей таблицы нет ключевого поля, объект OleDbDataAdapter не будет создан. Вам все-таки придется создать ключевое поле, как я описывал ранее, и снова соединить базу данных с проектом.

Проверка адаптера. Поскольку адаптер создан, можно проверить, как он работает. Щелкните правой клавишей мыши по форме и в контекстном меню выберите Preview Data. Вы увидите окно Data Adapter Preview, в котором щелкните кнопку Fill Dataset. Результат вы видите на Рис. 24.21.



Рис. 24.21

Окно заполнилось данными нашей таблицы. Все в порядке. Правда, поля расположены в какой-то непонятной последовательности. Ну да ладно пока. Поля в окне можно сортировать, щелкая по именам полей.



Закройте окно, оно нам понадобилось только для проверки и больше не пригодится.

Создаем DataSet. Пора создавать DataSet. Щелкните правой клавишей мыши по форме и в контекстном меню выберите Generate Dataset. Вы увидите диалоговое окно (Рис. 24.22). Оно предлагает создать объект DataSet1, включающий в себя таблицу «Книги», поставляемую адаптером OleDbDataAdapter1.



Рис. 24.22

Щелкните ОК. Вы увидите, что в ваш проект добавился еще и объект DataSet11 (вы можете видеть его на дизайнере компонентов на Рис. 24.23). Обратите внимание, что в имя добавилась лишняя единичка, не спутайте.

С этого момента вы можете писать несложный код, запускать проект и работать с базой данных программным путем, что мы и будем делать попозже. Однако, не очень-то удобно это делать вслепую, не видя во время работы саму таблицу базы данных, а DataSet сам по себе ее не показывает. Способов увидеть ее много. Но для удобной работы с базой данных вручную после запуска проекта вам лучше всего иметь на форме инструмент типа сетки, что была в Access (Рис. 24.3) или в Server Explorer (Рис. 24.16). И такой инструмент есть. Это элемент управления DataGrid. Возьмите его в Toolbox и разместите пошире на форме (вы можете видеть его на Рис. 24.23 и Рис. 24.24). Работать он будет в паре с невидимым объектом DataSet, таблицу которого и будет делать видимой в режиме работы.



Зайдите в окно свойств DataGrid. Поскольку в базе данных может присутствовать несколько таблиц, нужно указать, с какой именно из них будет работать наш DataGrid, другими словами, к кому он будет привязан. Для этого установим значение его свойства DataSource (источник данных) в DataSet11.Книги (см. Рис. 24.23). Теперь DataGrid будет автоматически отражать содержимое таблицы Книги из объекта DataSet11. И наоборот – изменения, сделанные вами в DataGrid, будут автоматически отражаться в DataSet11.

 Можете в окне свойств DataGrid задать текст и внешний вид темной полосы заголовка сетки. Она называется Caption и свойства, относящиеся к заголовку, тоже начинаются с Caption.



Рис. 24.23

Если вы сейчас запустите проект, то ничего, кроме заголовков полей, в сетке не увидите. Вам нужно приказать адаптеру его методом Fill загрузить данные из исходной базы в DataSet. Впоследствии, поработав с сеткой, дополнив и изменив данные в ней, вы захотите сохранить эти изменения в исходной базе данных. Для перекачки изменений из DataSet  в исходную базу вам понадобится метод адаптера Update.

В соответствии с этим добавьте в проект две кнопки с подходящими названиями и введите такой код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        OleDbDataAdapter1.Fill(DataSet11)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        OleDbDataAdapter1.Update(DataSet11)

End Sub

Запустите проект. Нажмите первую кнопку. Ваша сетка наполнится данными (Рис. 24.24).



Рис. 24.24

Если таблица в исходной базе данных была пуста, сейчас самое время ее заполнить. Заполняйте ее и изменяйте ширину полей и высоту строк так же, как в Access или в Server Explorer.

Чтобы удалить запись, выделите ее щелчком слева от нее и нажмите на клавиатуре Delete. Сортируйте записи щелчками по заголовкам полей.

Нажав вторую кнопку, вы сохраните свою работу в базе данных.


Содержание раздела