СРС / Подключенный режим / 4-Приложение, позвол модиф данные в базе
.docx
Приложение Book.v4, позволяющее модифицировать данные в базе
Решаемая задача – модификация данных в базе (вставка новых записей, изменение и удаление существующих записей). Приложение работает в подключенном режиме. Реализуются: подключение к базе данных, создание объектов Connection, Command, типизированный DataReader и DataTable.
Достоинства приложения:
простота реализации;
эффективная работа за счет использования простого объекта DataReader, обеспечивающего быстрое последовательное однонаправленное чтение данных;
извлечение строго типизированных данных, допускающих чтение и правильное использование их в программе.
Недостатки приложения:
данные можно просматривать только в одном направлении;
используется постоянное соединение с базой данных (монопольный доступ объекта DataReader к активному соединению).
Модифицировать и передавать данные в подключенном режиме просто. Для обновления данных используют метод ExecuteNonQuery, который выполняет запрос, не создавая объект DataReader для приема его результатов.
Значения возвращаемых параметров и параметров вывода доступны по завершении вызова метода ExecuteNonQuery. Метод ExecuteNonQuery возвращает целое число. Для операторов UPDATE, INSERT и DELETE возвращается количество строк, обработанных запросом. Для прочих типов операторов возвращаемым значением является -1.
Для демонстрации возможности добавления, изменения и удаления записей в базе данных создадим новый проект Windows Forms Application с именем Book.v4, поместив его в решение Connected.
Проект содержит главную форму Form1. Установим новый заголовок окна формы – Book v4 (свойство Text). Добавим на форму элемент StatusStrip для отображения строки состояния. В StatusStrip добавим метку StatusLabel с именем lbRecordsCount (свойство Name) для отображения количества записей.
Добавим на форму элемент ToolStrip и создадим на нем четыре кнопки для добавления, изменения и удаления данных, а также для обновления содержимого DataGridView. Переименуем их соответственно в bNew, bEdit, bDelete, bRefresh (свойство Name).
В свободную часть формы добавим элемент DataGridView для отображения табличных данных. Этот элемент назовем dgvData (свойство Name) и зададим в его свойстве Dock значение Fill.
Теперь необходимо поместить на кнопки соответствующие пиктограммы. Эти пиктограммы можно взять в библиотеке VS 2012 Image Library, которая поставляется вместе с Visual Studio 2012 или скачивается с сайта Microsoft.
Файлы пиктограмм должны быть добавлены в файл ресурсов проекта Resources.resx. Необходимо в обозревателе решений в проекте Book.v4 найти этот файл и дважды щелкнуть по нему ЛКМ. Далее щелкнуть Добавить ресурс / Добавить существующий файл. Найти в библиотеке файл action_add_16xLG.png и добавить его в файл ресурсов проекта. Затем с помощью той же процедуры добавить графические файлы action_Cancel_16xLG, pencil_005_16xLG, refresh_16xLG.
После этого, выделив на форме кнопу bNew, обратимся к ее свойству Image и щелкнем кнопку с тремя точками. В окне Выбор ресурса установим переключатель Файл ресурсов проекта, выделим файл action_add_16xLG.png и щелкнем кнопку ОК.
Выделив на форме кнопу bEdit, обратимся к ее свойству Image и щелкнем кнопку с тремя точками. В окне Выбор ресурса установим переключатель Файл ресурсов проекта, выделим файл pencil_005_16xLG и щелкнем кнопку ОК.
Выделив на форме кнопу bDelete, обратимся к ее свойству Image и щелкнем кнопку с тремя точками. В окне Выбор ресурса установим переключатель Файл ресурсов проекта, выделим файл action_Cancel_16xLG и щелкнем кнопку ОК.
Выделив на форме кнопу bRefresh, обратимся к ее свойству Image и щелкнем кнопку с тремя точками. В окне Выбор ресурса установим переключатель Файл ресурсов проекта, выделим файл refresh_16xLG и щелкнем кнопку ОК.
В результате главная форма приложения примет вид, показанный на рисунке.
Для добавления и модификации записей таблицы Orders создадим отдельную форму. Можно вводить данные прямо в DataGridView, но в реальных приложениях хорошим стилем считается создание отдельной формы ввода данных.
Добавим в проект Book.v4 еще одну форму. Для этого щелкнем ПКМ на значке проекта в окне Обозреватель решений и в контекстном меню выберем Добавить / Форма Windows… Зададим новое имя формы FOrder (свойство Name) и установим новый заголовок окна формы – Заказы (свойство Text).
Добавим на форму элемент panel1, зададим в его свойстве Dock значение Bottom (элемент прижмется к нижнему краю и растянется по ширине). Затем вручную мышью придадим элементу panel1 нужную высоту.
В оставшуюся свободной часть формы добавим элемент panel2, зададим в его свойстве Dock значение Fill (элемент займет всю свободную часть формы).
На элемент panel1 поместим две кнопки. Левую переименуем в bOK, правую – в bCancel (свойство Name). На кнопке bOK предусмотрим надпись OK, на кнопке bCancel – надпись Cancel (свойство Text). У кнопки bOK установим для свойства DialogResult значение OK, у кнопки bCancel – значение Cancel.
На элемент panel2 поместим пять полей ввода: два элемента TextBox для кода заказа и числа заказанных книг (tbOrderID, tbNumber), элемент ComboBox для выбора клиента (cbUser), элемент ComboBox для выбора книги (cbBook) и поле DateTimePicker для ввода даты и времени заказа (dtDateTime). Дизайн формы ввода данных показан ниже.
Для главной формы создадим обработчик события Load, в тело которого будем писать код загрузки типизированных данных из базы. Создадим также обработчики события Click для кнопок bNew, bEdit, bDelete, bRefresh.
На форме ввода и модификации данных для выбора клиента надо наполнить данными выпадающий список cbUser. Для этого следует выполнить запрос, вызвав хранимую процедуру User_Select без параметров, которая вернет список клиентов, и привязать данные (объект DataTable) к элементу ComboBox. Элемент ComboBox имеет свойство DataSource, значение которого задается так же, как и значение свойства DataSource элемента управления DataGridView.
При создании экземпляра DataTable мы присваиваем столбцам таблицы имена полей из объекта SqlDataReader. Свойство DisplayMember определяет, значениями какого столбца элемент ComboВох заполняет список, и принимает имя соответствующего столбца DataTable. В нашем случае это имя столбца u_surname объекта DataTable. Затем надо задать свойству ValueMember имя столбца user_ID объекта DataTable.
Аналогично для выбора книги надо наполнить данными выпадающий список cbBook. Для этого следует выполнить запрос, вызвав хранимую процедуру User_Select без параметров, которая вернет список клиентов, и привязать данные (объект DataTable) к другому элементу ComboBox.
В конструкторе формы ввода данных будет иметь два параметра: модифицируемая запись из базы данных, передаваемая как DataRow, и переменная типа bool, указывающая на действие – обновление записи или создание новой записи.
На главной форме Form1 загрузку данных в DataGridView выделим в отдельный метод LoadData(). Этот метод будет вызываться при первой загрузке данных в форму и при обновлении данных.