СРС / Автономный режим / 6-Приложение, загруж все таблицы БД
.docx
Приложение Book.v6, способное загружать все таблицы базы данных
Изучим взаимодействие DataSet с объектом DataAdapter. Создадим приложение, способное загружать информацию из всех таблиц базы данных Book.
Для этого создадим новый проект Windows Forms Application с именем Book.v6, поместив его в решение Disconnected. Проект содержит одну форму Form1. Установим новый заголовок окна формы – Book v6 (свойство Text).
Добавим на форму элемент StatusStrip для отображения строки состояния. В StatusStrip добавим метку StatusLabel с именем lbRecordsCount (свойство Name) для отображения количества записей.
Поместим на форму элемент SplitContainer, в левой части которого распололожим элемент управления TreeView, который будет отображать дерево объектов нашей базы данных, и зададим в его свойстве Dock значение Fill. В правой части поместим элемент управления DataGridView для отображения записей выбранного объекта базы данных. Последний назовем dgvData (свойство Name) и также зададим в его свойстве Dock значение Fill.
Расположим на форме компонент ImageList, который будет контейнером иконок для элемента TreeView. Поместим в ImageList две иконки для отображения корневого и дочерних узлов дерева. Для этого с помощью свойства Images откроем редактор коллекции изображений и поместим туда иконки. Подходящие иконки (Diagram_32XLG.png и table_16xLG.png) можно взять в библиотеке VS 2012 Image Library, которая поставляется вместе с Visual Studio 2012 или скачивается с сайта Microsoft.
В окне Properties для элемента TreeView свяжем свойство ImageList с нашим компонентом imageList1. Внешний вид формы представлен на рисунке.
Перейдем к коду. Скорректируем подключаемые пространства имен в соответствии со следующим списком:
using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Windows.Forms;
Для названий объектов базы данных используются именованные константы. Имена объектов базы данных многократно используются в тексте программы, и применение именованных констант упростит обращения к объектам и уменьшит вероятность ошибок при использовании строковых значений имен объектов.
private const string CatalogEntity = "Catalog";
private const string BookEntity = "Book";
private const string UserEntity = "User";
private const string OrderEntity = "Order";
Для класса Form1 создадим группу закрытых переменных-членов класса:
private DataSet bookDataSet;
private SqlDataAdapter adapter;
private SqlConnection connection;
private SqlCommand command;
Для формы Form1 создадим обработчик события Load. В теле обработчика события Load формы поместим код инициализации переменных и заполнения дерева объектов (см. листинг программы – метод Form1_Load).
Вначале создаем объект adapter класса Adapter и объект connection класса Connection. Как и ранее, передаем строку соединения из конфигурационного файла в объект connection. Создаем объект command класса Command. Задаем его свойству CommandType, значение StoredProcedure (команда запуска хранимой процедуры). В свойстве CommandText объекта имя конкретной хранимой процедуры пока не определяем.
Для элемента управления TreeView создадим обработчик события AfterSelect. Он будет срабатывать при выборе узла в дереве объектов и динамически подключать разные наборы данных из нашей базы данных Book. Код обработчика события представлен в листинге (метод treeView1_AfterSelect).
В программе напишем метод SetHiddenFields(), который закрывает ненужные для пользователя поля, например, в объекте Order это поля идентификаторов внешних ключей o_user_ID и o_book_ID. Пользователю нужны поля с названием книги и полным именем клиента, и не нужен идентификатор клиента.
Внешний вид приложения показан на рисунке. Теперь мы можем полностью просматривать все объекты в нашей базе данных.
Резюме
Решаемая задача – чтение информации из всех таблиц базы данных. Приложение работает в отключенном режиме. Реализуются: подключение к базе данных, создание объектов Connection, Command, DataTable, DataSet и DataAdapter.
Достоинства приложения:
простота реализации и эффективная работа;
не используется постоянное соединение с базой данных.
Недостатки приложения:
из базы извлекаются нетипизированные данные (типа Object), которые не могут далее использоваться в приложении (валидация, модификация и т.п.);
названия полей объектов базы данных могут иметь не очень понятные для пользователя имена;
приложение не позволяет модифицировать данные.