Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СРС / Подключенный режим / 1-Приложение, извлек данные для чтения

.docx
Скачиваний:
5
Добавлен:
28.06.2021
Размер:
149.24 Кб
Скачать

4

  1. Приложение Book.v1, извлекающее данные для чтения

Решаемая задача – визуализация SQL-запросов к базе данных, возвращающих наборы данных. Приложение работает в подключенном режиме. Реализуются: подключение к базе данных, создание объектов Connection, Command, DataReader.

Достоинства приложения:

  • простота реализации;

  • эффективная работа за счет использования простого объекта DataReader, обеспечивающего быстрое последовательное однонаправленное чтение данных.

Недостатки приложения:

  • данные можно просматривать только в одном направлении (нельзя вернуться к записи, прочитанной ранее);

  • из базы извлекаются нетипизированные данные (типа Object), которые не могут далее использоваться в приложении (валидация, модификация и т.п.);

  • используется постоянное соединение с базой данных (монопольный доступ объекта DataReader к активному соединению).

Создадим новый проект Windows Forms Application с именем Book.v1, поместив его в решение Connected. Проект содержит одну форму Form1. Установим новый заголовок окна формы – Book v1 (свойство Text).

Добавим на форму элемент StatusStrip для отображения строки состояния и элемент DataGridView для отображения табличных данных.

Элемент DataGridView назовем dgvData (свойство Name) и зададим в его свойстве Dock значение Fill. В StatusStrip добавим метку StatusLabel с именем lbRecordsCount (свойство Name) для отображения количества записей.

Для формы создадим обработчик события Load, в тело которого будем писать код, необходимый для чтения информации из базы данных.

Выполним необходимые изменения в коде программы. Код помещаем в тело созданного обработчика события Load формы, как показано в листинге.

Скорректируем подключаемые пространства имен в соответствии со списком, показанным в листинге. Для корректной работы с объектом Connection следует добавить еще одно пространство имен System.Data.SqlClient.

Создаем объект Connection. Передаем строку соединения из конфигурационного файла в объект Connection.

Создаем объект Command. Задаем его свойство CommandType, определяющее тип SQL-команды. В свойстве CommandText объекта зададим саму SQL-команду.

Открываем соединение с базой данных.

Поскольку предполагается получение некоторого результирующего набора, то вызываем метод ExecuteReader() для получения объекта SqlDataReader.

Сохраняем данные в объекте ArrayList (можно в DataTable).

Закрываем соединение с базой данных и отображаем данные в элементе DataGridView. Элемент DataGridView имеет свойство для привязки данных DataSource. Это свойство задает источник данных типа Object (ArrayList, DataTable и другие типы), для которого DataGridView отображает данные.

Запустив приложение, увидим, что элемент DataGridView отобразит записи из таблицы Users базы данных Book.

Класс ArrayList предназначен для создания динамических массивов. Он позволяет динами­чески добавлять и удалять память для хранения очередного элемента массива и ис­пользует столько памяти, сколько нужно, с небольшими затратами дополнитель­ных ресурсов на поддержку динамики. Эти затраты настолько невелики, что о них можно забыть. Например, однонаправленный список тратит дополнительно память размером с одно число на каждый элемент для хранения ссылок.

Этот класс и другие коллекции .NET объявлены в пространстве имен System.Collections, поэтому необходимо подключить это пространство с помо­щью using к модулю, где используются коллекции.

Класс ArrayList хранит массив объектов класса Object. Так как этот класс яв­ляется одним из предков для всех классов, то в список мо­жно поместить объект абсолютно любого класса. Более того, можно помещать в массив элементы разных классов. Такие массивы называются нетипизированными, поскольку они не привязаны жестко к определенному классу элементов.

Это приложение может использовать различные SQL-запросы. Чтобы прочитать все записи в таблице Catalogs, достаточно изменить одну строку:

cmd.CommandText = "SELECT * FROM Catalogs";

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

cmd.CommandText = "SELECT U.user_ID, U.u_surname FROM Orders O "+

"RIGHT OUTER JOIN Users U ON O.o_user_ID=U.user_ID "+

"WHERE O.order_ID IS NULL;";