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

СРС / Подключенный режим / 2-Приложение, излек данные с пом хран процедуры

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

3

  1. Приложение Book.v2, извлекающее данные для чтения с использованием хранимой процедуры

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

Достоинства и недостатки приложения – см. п. 1.

Рассмотрим передачу параметров в объект Command. Параметры – значения, заполняющие поля подстановки в тексте команды. Каждый параметр представлен экземпляром класса SqlParameter. Параметры хранятся в свойстве Parameters объекта Command. При выполнении значения параметров считываются из этого свойства и подставляются в оператор SQL, или передаются хранимой процедуре.

Объекты Command поддерживают набор Parameters, в котором хранятся объекты Parameter соответствующего типа. Объект Parameter преобразует параметры из типа, используемого в приложении, в тип, используемый в БД. Поскольку эти свойства взаимосвязаны, при изменении значения одного из них значение другого автоматически изменяется и преобразуется в соответствующий поддерживаемый тип. Аналогичным образом связаны свойства DbType и SqlType объектов SqlParameter, свойство SqlType указывает тип SQL, представленный параметром.

Свойство Direction объекта параметра определяет, является параметр входным или выходным. Значения свойства (Input, Output, InputOutput, ReturnValue) указывают, должен ли параметр хранить значение, возвращаемое хранимой процедурой или функцией.

На члены набора Parameters ссылаются в коде по индексу или по имени, заданному свойством ParameterName. Свойства Precision, Scale и Size определяют длину и точность значения параметров:

  • Precision и Scale применяются с числовыми и десятичными параметрами и определяют разрядность и длину дробной части значения свойства Value;

  • Size применяется с двоичными и строковыми параметрами и представляет максимальную длину такого поля.

Свойства SourceColumn и SourceVersion используются с параметрами, привязанными к полям объекта DataTable. Свойство SourceColumn указывает поле для поиска или сопоставления значений, а свойство SourceVersion – версию поля для редактирования. Свойство Value содержит значение параметра.

Модифицируем программу Book.v1. Для примера возьмем хранимую процедуру Order_Select и построим параметризованный запрос, возвращающий заказы одного клиента.

Скрипт для хранимой процедуры Order_Select приведен выше. Процедура Order_Select использует базовую таблицу Orders и связанные таблицы Users и Books. Три параметра процедуры – @order_ID, @user_ID и @book_ID обеспечивают широкие возможности по выборке данных.

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

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

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

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

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

Для вызова хранимой процедуры установим свойство CommandType в StoredProcedure, запишем в свойство CommandText имя хранимой процедуры.

Для создания объекта SqlConnection использован конструктор с параметром, через который передается строка подключения. Все остальное, как в приложении Book.v1.

Результат вывода параметризованного запроса для таблицы Orders показан на рисунке.

Если в качестве параметра использовать код книги @book_ID, то это же приложение позволит получить сведения обо всех заказах, содержащих конкретную книгу:

cmd.Parameters.Add(new SqlParameter("@book_ID", SqlDbType.Int));

cmd.Parameters["@book_ID"].Value = 20;