DEVELOPMENT OF AN APPLICATION FOR WORKING WITH DATABASES

Roza Gaynanova

lecturer of the Department of General Educational Disciplines

Kazan national research Technological University

Russia, Kazan

АННОТАЦИЯ

В статье рассматриваются методы доступа к базам данных и применяемые в этих методах доступа программные интерфейсы. Рассматривается интеграция приложений Visual C# с сервером СУБД Microsoft SQL Server 2012. В качестве примера рассматривается разработка информационной системы «Туристическое агентство».

ABSTRACT

The article examines the methods of access to databases and the software interfaces used in these access methods. We consider the integration of Visual C # applications with the Microsoft SQL Server 2012 database server. As an example the development of the "Tourist Agency" information system is considered.

Ключевые слова: база данных, SQL Server, приложение, пользователи, элемент управления, запрос.

Keywords: database, SQL Server, application, users, control element, query.

Информационная система – это взаимосвязанная совокупность средств, методов и персонала, используемых для хранения, обработки и выдачи информации в интересах достижения поставленной цели. Разрабатываемая информационная система будет построена по технологии клиент-сервер. В таких системах информация хранится на сервере, а интерфейс информационной системы хранится на клиентских компьютерах, через него пользователи информационной системы получают доступ к данным.

При разработке информационной системы приходится решать две основные задачи:

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

База данных «Турагентство» создается на Microsoft SQL Server 2012. В базе данных хранится информация о клиентах данного турагентства (туристах), о предлагаемых им турах, об оформлении и оплате путевок. На этапе проектирования БД создаются таблицы «Туристы», «Туры», «Путевки», «Сезоны», «Оплата». Устанавливаются связи между таблицами.

Приложением турагентства будут пользоваться руководитель турагентства, менеджеры по продажам, бухгалтер, кассир и офисные сотрудники турагентства. Один из офисных сотрудников назначается системным администратором. Только он будет вести учетные записи пользователей. Кроме пяти основных таблиц создается таблица «Пользователи», которая содержит информацию о пользователях БД. Эта таблица не связана с другими таблицами. Структура этой таблицы: код пользователя, фамилия, должность, логин и пароль. Вносить изменения в эту таблицу может только системный администратор.

Система безопасности SQL Server строится на основе двух концепций: аутентификации и авторизации. Системный администратор, отвечающий за безопасность SQL Server, создает для каждого пользователя отдельный объект login. Этот объект содержит имя учетной записи пользователя SQL Server, его пароль, полное имя и другие атрибуты, предназначенные для управления доступом к базам данных SQL Server. Подключившись к SQL Server, пользователь получает доступ к тем базам данных, в которых зарегистрирована его учетная запись. Для того чтобы зарегистрировать учетную запись в конкретной базе данных, системный администратор создает в ней имя пользователя базы данных и связывает ее с определенной учетной записью. Системный администратор наделяет пользователей определенными полномочиями. Менеджер по продажам может вносить изменения в таблицы «Туристы», «Путевки» и изменять столбец «Количество_мест» в таблице «Туры» после продажи очередной путевки. Сотрудник турагентства может вносить изменения в таблицы «Сезоны» и «Туры». Бухгалтер и кассир – в таблицу «Оплата».

Предоставление полномочий можно осуществлять в среде SQL Server Management Studio открыв окна свойств соответствующего пользователя. Представить полномочия можно и с помощью инструкции GRANT. Примеры предоставления полномочий менеджеру. Следующая инструкция предоставляет право пользователю Menedger просматривать, изменять таблицу «Туристы», вставлять новые строки и удалять устаревшие данные .

USE Турагентство

GRANT SELECT, UPDATE, INSERT, DELETE

ON Туристы

Аналогичная инструкция создается для работы с таблицей «Путевки». Чтобы предоставить менеджеру право изменять только один столбец таблицы «Туры» после имени таблицы в скобках указывается имя изменяемого столбца Туры (Количество_мест). Предоставляемые операции SELECT, UPDATE.

В языке управления данными (Data Control Language - DCL) существуют четыре инструкции: COMMIT (завершить), ROLLBACK (откатить), GRANT (предоставить), REVOKE (отозвать). Все эти инструкции связаны с защитой базы данных от случайного или умышленного повреждения. Базы данных уязвимы именно тогда, когда в них вносят изменения. Для защиты базы данных в SQL предусмотрено ограничение операций. Которые могут ее изменить, так что они выполняются только в пределах транзакций. При попытке нескольких пользователей одновременно использовать одну и ту же таблицу базы данных, создается ситуация конкурентного доступа. Проблемы, связанные с одновременным доступом, возникают даже в относительно простых приложениях, если приложение установлено и запущено в многопользовательской системе, у которой в недостаточной мере обеспечено управление одновременным доступом. Конфликт транзакций не возникает, если они выполняются последовательно.

Одним из главных инструментов поддержания целостности базы данных является транзакция. Транзакция инкапсулирует все SQL-инструкции, которые могут воздействовать на базу данных. Транзакция SQL завершается одной из двух инструкций: COMMIT (завершить) или ROLLBACK (откатить). Если транзакция завершается инструкцией ROLLBACK, то отменяются все ее инструкции, база данных возвращается в исходное состояние. Обычная транзакция может выполняться в одном из двух режимов: READ-WRITE (чтение-запись) или READ-ONLY (только чтение). Для транзакции можно задать один из следующих уровней изоляции: SERIAIZABLE (последовательное выполнение), REPEATABLE READ (повторяющееся чтение), READ UNCOMMITED (чтение неподтвержденных данных). По умолчанию действуют характеристики READ-WRITE и SERIAIZABLE. Действующие по умолчанию характеристики транзакции SQL, обычно подходят для большинства пользователей.

Приложение создается в среде Visual Studio 2012 с использованием языка программирования C#. Проектирование программного продукта начинается с разработки интерфейса пользователя.

Главное окно приложения должно вызывать основные функции для работы с приложением (рисунок 1). Для выполнения этих операций используется меню. Меню состоит из следующих пунктов: «Таблицы», «Запросы», «Отчеты». Каждый из этих пунктов содержит подпункты. Каждая функция будет выполняться в своем окне. На главном окне приложения устанавливается элемент MenuStrip, формируются опции меню. На окне формы размещается элемент PictureBox. В область элемента загружается рисунок. Рисунок должен занимать всю область. Свойство SizeMode устанавливает масштабирование рисунка. Для этого свойства из раскрывающегося списка выбирается StretchImage, рисунок масштабируется так, что он занимает всю поверхность объекта.

Для отображения списка пользователей, которые имеют право работать с базой данных «Турагентство» устанавливается элемент управления comboBox. Элемент comboBox привязывается к источнику данных. Открывается окно «С omboBox Задачи », в котором устанавливается флажок «Использовать элементы привязанные к данным», если этот флажок установлен открываются параметры привязки данных. Элемент comboBox привязывается к таблице «Пользователи», в строке «Отобразить члена» выбирается «Фамилия». Для ввода логина устанавливается элемент управления textbox1, для ввода пароля textBox2. Для элементов textBox1 и textBox2 cвойство UsesSystemPasworChar устанавливается в true, которое указывает, должен ли текст в текстовом поле отображаться символами пароля по умолчанию. Устанавливаются две командные кнопки «Войти» и «Сменить пользователя».

При привязывании элемента comboBox к таблице «Пользователи», в программном коде формы появляется обработчик события Form1_Load.

private void Form1_Load(object sender, EventArgs e)

this.пользователиTableAdapter1.Fill(this.турагентствоDataSet10.Пользователи);

При запуске приложения меню не доступно. Чтобы войти в систему надо ввести данные о пользователе и нажать кнопку «Войти». При загрузке формы фамилии пользователей, содержащиеся в таблице «Пользователи» загружаются в элемент управления comboBox1. В этот обработчик добавляются строки, которые делают недоступными меню, кнопку «Сменить пользователя» и в элементе comboBox1 ни один элемент не выбранным:

menuStrip1.Enabled = false; comboBox1.SelectedIndex = -1;

button2.Enabled = false;

Рисунок 1. Вид главного окна приложения

При нажатии кнопки «Войти» проверяется, имеется в таблице «Пользователи», пользователь, с данной фамилией, и правильно ли введены логин и пароль. В области описания класса формы описываются параметры, передаваемые в sql команду. Это три параметра: фамилия пользователя, его логин и пароль.

private string parfam, parpasw, parlog;

В пространство имен добавляется строка:

using System.Data.SqlClient;

// Обработчик события нажатия кнопки «Войти»

string sql = "";

string connstr = @"Data Source= B302CN-8 \TEST_SQL;Initial Catalog=Турагентство;Integrated Security=True";

SqlDataReader cmReader;

parfam = comboBox1.Text; parlog = textBox1.Text;

SqlConnection conn = new SqlConnection(connstr);

sql = "SELECT Фамилия, Логин, Пароль FROM Пользователи " +

" WHERE (Фамилия = @fam) and (Пароль=@pasw)";

SqlCommand cmdkod = new SqlCommand(sql, conn);

cmdkod.Parameters.Add(new SqlParameter("@fam", SqlDbType.NChar, 25));

cmdkod.Parameters["@fam"].Value = parfam;

cmdkod.Parameters.Add(new SqlParameter("@pasw", SqlDbType.NChar, 10));

cmdkod.Parameters["@pasw"].Value = parpasw;

cmdkod.Parameters.Add(new SqlParameter("@log", SqlDbType.NChar, 15));

cmdkod.Parameters["@log"].Value = parlog;

if (!cmReader.Read())

MessageBox.Show("Неверный пароль!");

cmReader.Close(); conn.Close();

menuStrip1.Enabled = true; comboBox1.SelectedIndex = -1;

button1.Enabled = false; button2.Enabled = true;

textBox1.Text = ""; textBox1.Enabled = false;

textBox2.Text = ""; textBox2.Enabled = false;

comboBox1.Enabled = false;

cmReader.Close();

private void button2_Click(object sender, EventArgs e)

menuStrip1.Enabled = false; comboBox1.Enabled = true;

textBox1.Enabled = true; textBox2.Enabled = true;

button1.Enabled = true; button2.Enabled = false;

Описание работы обработчика события нажатия кнопки «Войти».

Строка connstr содержит строку подключения. В строке sql записывается текст формируемого запроса, начиная с оператора select, после которого перечисляются выбираемые поля из таблиц, которые указаны после слова from.

В обработчике создается новый экземпляр объекта SqlConnection, который обеспечивает подключение к серверу SQL. Объект SqlCommand содержит команду с тремя параметрами для поиска в таблице «Пользователи» пользователя с данной фамилией, логином и паролем. Обработчик button1_Click открывает соединение SqlConnection. Далее обработчик выполняет SQL команду, хранящуюся в объекте cmdkod.

cmReader = cmdkod.ExecuteReader();

В результате выполнения метода ExecuteReader создается объект класса SqlDataReader, который позволяет последовательно прочитать все строки выполнения команды SQL. Для выборки используется метод SqlDataReader. Read. Если таблица «Пользователи» не содержит ни одной записи с заданной фамилией, логином и паролем, то метод cmReader.Read() вернет значение false. Это означает, что введены неверный логин или пароль. В этом случае выдается сообщение о неверных введенных данных, закрываются объекты cmReader и SqlConnection . Если данные о пользователе введены правильно, меню и кнопка «Сменить пользователя» становятся доступными. Кнопка «Войти» становится недоступным. Элементы textBox1 и textBox2 очищаются и становятся недоступными. Элемент comboBox1 также становится недоступным (рисунок 2)

Рисунок 2. Вид главного окна после входа пользователя в систему

Таблицы и результаты выполнения запросов будут отображаться на элементах управления DataGridView. Главное назначение этих элементов – связывание с таблицами внешних источников данных, прежде всего с таблицами баз данных. Для удобства просмотра и ввода новых записей таблицы «Сезоны», «Туры» и «Путевки», «Оплата» будут отображаться по две в одном окне. Каждый элемент управления DataGridView связывается с соответствующей таблицей базы данных «Турагентство». В данном окне выбрана таблица «Туристы» (рисунок 3). После завершения подключения (нажатия кнопки «Готово») на форме появляются компоненты DataSet, BindingSource и TableAdapter. Эти компоненты являются не визуальными, поэтому они отображается на дополнительной панели. DataSet - это специализированный объект, содержащий образ базы данных. Для осуществления взаимодействия между DataSet и собственно источником данных используется объект типа TableAdapter. Само название этого объекта - адаптер, преобразователь, - указывает на его природу. TableAdapter содержит методы Fill и Update, которые выполняют прямую и обратную передачу данных между набором DataSet и таблицей хранящейся в базе данных SQL сервера. Метод Fiil наполняет набор DataSet данными из сервера SQL, а Update обновляет базу сервера SQL данными из локального набора DataSet. Компонент BindingSource упрощает привязку элементов управления в форме к данным. Основным свойством компонента BindingSource является свойство Data Source, указывающее на источник данных .

После завершения подключения таблиц к источникам данных в программном коде формы появляется обработчик события Form2_Load.

private void Form2_Load(object sender, EventArgs e)

this.туристыTableAdapter.Fill(this.турагентствоDataSet9.Туристы);

При загрузке формы данные, содержащиеся в таблице «Туристы» отображаются на элементе управления DataGridView на окне формы Form2. В таблицу можно вносить изменения и добавлять новые записи. После внесения изменений нажать на кнопку «Сохранить Туристы». Обработчик события нажатия кнопки «Сохранить Туристы»:

private void button1_Click(object sender, EventArgs e)

сезоныTableAdapter.Update(турагентствоDataSet9);

MessageBox.Show("Данные сохранены");

Рисунок 3. Вид окна с таблицей «Туристы»

Каждый запрос отображается на отдельном окне. На окне Form1 в меню «Запросы» добавляется новый пункт с именем запроса. Если запрос не имеет параметров, для отображения результатов выполнения запроса на окне формы устанавливается элемент управления DataGridView и связывается с соответствующей процедурой или функцией базы данных.

В данной статье приведены некоторые методы разработки приложений, работающих с базами данных, способ организации доступа к работе с системой ограниченного круга лиц, способы интеграции приложений Visual C# с сервером СУБД Microsoft SQL Server 2012. При совместном использовании языка программирования Visual C# с SQL можно создавать мощные приложения с широким набором возможностей. Основная сила SQL заключается в извлечении данных. Сколько бы в ни было строк в таблице их можно извлечь с помощью единственной инструкции SELECT. В то же время главным недостатком языка SQL является его недоразвитый интерфейс пользователя. С помощью процедурных языков можно создавать удобные интерфейсы ввода и просмотра данных . Самый распространенный метод объединения SQL с процедурными языками называется внедрением кода SQL. Инструкция SQL вставляется в нужное место процедурной программы. Между программой, написанной на процедурном языке, и кодом SQL должна передаваться информация. Для этого используются базовые переменные. Чтобы SQL распознал эти переменные их необходимо объявить. Переменные объявляются в области описания класса формы до описания программного кода. В программном коде созданный новый экземпляр объекта SqlConnection обеспечивает подключение к серверу SQL. Объект SqlCommand обеспечивает выполнение внедренной SQL команды.

Список литературы:

  1. Аллен Тейлор. SQL для чайников, 8-е издание.: Пер. с англ. – М.: ООО “И.Д. Вильямс”, 2014. – 416 с.
  2. Гайнанова Р.Ш. Разработка приложений для работы с базами данных MS SQL Server 2012 //Фундаментальные и прикладные науки сегодня: Материалы XI международной практической конференции (10-11 апреля 2017г. Noth Charleston, USA), том 3 – c. 34-41.
  3. Фролов А.В., Фролов Г.В. Визуальное проектирование приложений C#. - М.: КУДРИЦ-ОБРАЗ, 2003, - 512с.

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

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

О SQL

SQL - это язык программирования, который применяется для создания баз данных. Если его установить на компьютер и начать создавать базу данных, то будет не совсем удобно. Связано это с тем, что сам по себе SQL не имеет никакой графической оболочки, а запросы к базе данных нужно отправлять вообще через командную строку. По этой причине появились различного рода программы, которые упрощают разработку баз данных. Однако обучиться азам этого языка все же стоит. Вдруг нужно какой-то запрос сделать, а программа работает некорректно.

Microsoft Access

Эта программа для создания баз данных точно знакома многим. Ведь она идет в пакете программ Microsoft Office. Эта программа является одной из самых легких в освоении, ведь знания языка программирования SQL там практически не нужны. Можно лишь обозначить, какой запрос сделать, а программа сама составит SQL-запрос.

Насчет актуальности программы. До сих пор базы данных множества организаций сделаны именно с помощью Microsoft Access. Действительно, сама программа очень легкая, есть интуитивно понятный интерфейс. Более того, основам работы в Access даже обучают в школе и на начальных курсах колледжа!

PhpMyAdmin

Access, конечно, программа хорошая, но если нужна база данных для сайта, она не справится. Тогда на помощь приходит PhpMyAdmin. Это очень полезная программа для создания баз данных. Установка на компьютер занимает некоторое время, да и при инсталляции легко что-то сделать не так, и не будет работать. Поэтому при установке этой программы для создания баз данных нужно четко следовать инструкции. Но плюсом еще PhpMyAdmin является то, что к ней можно получить доступ и через интернет в виде сайта! Например, у вас есть сайт, который работает на WordPress. У него будет база данных. И если у вас сайт на каком-нибудь хорошем хостинге, то, вероятнее всего, работа с базами данных будет осуществляться через PhpMyAdmin, и к нему можно будет получить доступ через панель управления хостинга.

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

В этой статье были рассмотрены основные программы для создания баз данных. На самом деле их огромное множество, поэтому каждый выбирает инструмент под себя, но если же вы только осваиваетесь и желаете изучить эту область, то рекомендуется работать с MySQL WorkBench. После того как вы изучите основы SQL, для вас уже не будет существенной разницы, где работать, ведь запросы везде одинаковые. Удобно и то, что, создав базу данных в одной программе, можно ее открыть через другой софт, который тоже предназначен для работы с БД. При создании софта с базой данных не обойтись без этих знаний. Более того, освоив SQL, можно даже создать свое программное обеспечение для разработки и редактирования баз данных.

Создадим простое приложение баз данных, которое выводит на экранную форму информацию из таблицы «Туристы» и связанную с текущей записью таблицы «Туристы» запись таблицы «Информация о туристах» из базы данных Microsoft Access.

Для этого создадим пустое Windows-приложение. Внешний вид среды

разработки приведен на рисунке 39 .

Рис. 39. Пустое приложение

На рисунке 39 выделена группа компонентов «Данные» («Data»), которая содержит компоненты для доступа к данным и манипулирования ими.

Привязку данных БД к форме осуществляет компонент «Binding Source». Перенесем его на форму. После размещения его на форме среда разработки принимает следующий вид (рис. 40).

Рис. 40. Компонент Binding Source на форме

Компонент является не визуальным, поэтому он отображается на дополнительной панели. Основным свойством компонента является свойство DataSource, указывающее на источник данных. По умолчанию свойство является пустым, поэтому необходимо сформировать его значение. При выборе данного свойства в окне свойств появляется следующее окно (рис. 41).

Рис. 41. Список источников данных

В настоящий момент список пуст, поэтому необходимо создать новый источник данных, выбрав команду «Add Project Data Source» для создания нового источника данных и соединения с ним. Появляется следующее окно диалога (рис. 42).

Рис. 42. Список источников данных

Данный диалог предоставляет следующий выбор источников данных:

Database - База данных;

Service - Служба, это некоторый сервис, предоставляющий данные. Чаще всего это Web-сервис;

Object - Объект для выбора объекта, который будет генерировать данные и объекты для работы с ними.

В нашем случае необходимо выбрать пункт «База данных» («Database»). Появляется окно выбора соединения с данными (рис. 43).

Рис. 43. Выбор соединения с данными

Целью данного диалога является создание строки соединения, в которой будут описаны параметры соединения для механизма ADO, такие как тип базы данных, ее местонахождение, имена пользователей, средства безопасности и пр.

В выпадающем списке диалога находятся все создаваемые ранее соединения. Если необходимого соединения в списке нет, то следует использовать кнопку «Создать подключение» («New connection»). Нажатие кнопки приводит к появлению следующего диалога (рис. 44).

В данном диалоге выбирается тип источника данных (в данном случае Microsoft Access), имя базы данных (в данном случае имя и местоположение файла базы данных), имя пользователя и пароль, используемые для подключения к базе данных. Кнопка «Дополнительно» («Advanced») позволяет задать большое количество параметров, относящихся к различным деталям механизма ADO. Использование кнопки «Проверить подключение» («Test Connection») позволит убедиться в правильности введенных параметров и работоспособности соединения.

Рис. 44. Создание нового соединения

Последний шаг диалога - выбор тех таблиц или иных объектов базы данных, которые необходимы в данном источнике данных. Окно выбора представлено на рисунке 45.

Рис. 45. Выбор необходимых таблиц

В данном окне выбраны таблицы «Туристы» и «Информация о туристах». Поскольку иных объектов, кроме таблиц, в базе данных не было создано, на рисунке 45 отображаются только таблицы. На этом создание источника данных завершено. После нажатия кнопки «Готово» («Finish») рядом с компонентом BindingSource на форме появляется компонент DataSet.

Теперь данные, подключенные выше, необходимо отобразить на форме. Простейшим способом отображения данных является использование компонента DataGridView из группы компонентов Data. Компонент является визуальным и на форме выглядит следующим образом (рис. 46).

Рис. 46. Компонент DataGridView

Сразу же возникает окно настройки компонента, которое определяет его возможности по редактированию данных: «Включить редактирование» («Enable Adding»), «Включить правку» («Enable Editing»), «Включить удаление» («Enable Deleting»); возможность изменения последовательности столбцов: «Включить возможность изменения порядка столбцов» («Enable Column Reordering»); а также возможность закрепления в контейнере-родителе.

Для того чтобы компонент мог отображать данные, необходимо выбрать источник данных в выпадающем списке. Выбор выпадающего списка приводит к появлению следующего диалога (рис. 47).

Рис. 47. Выбор источника данных для DataGridView

В данном случае мы выбрали в качестве источника данных таблицу «Туристы». Данный выбор изменяет экранную форму следующим образом (рис. 48).

Рис. 48. Компонент DataGridView отображает структуру таблицы

На рисунке видно, что появился еще один компонент BindingSource и компонент TableAdapter, работающий с таблицей «Туристы». Обратите внимание, что в design-time или в процессе разработки данные из таблицы не отображаются.

Теперь необходимо отобразить данные из связанной таблицы «Информация о туристах». Для этого разместим на форме еще один компонент DataGridView и в качестве источника данных выберем следующее (рис. 49).

Рис. 49. Выбор источника данных для второго DataGridView

Здесь в качестве источника данных выступает не сама таблица «Информация о туристах», а связь (Binding Source) между таблицами «Туристы» и «Информация о туристах». Такой выбор гарантирует выбор из таблицы «Информация о туристах» только тех строк, которые связаны с текущей строкой в таблице «Туристы». Также такой выбор гарантирует правильность обновления и удаления связанных данных. Работа полученного приложения показана на рисунке 50.

Рис. 50. Приложение базы данных в работе

Перемещение по данным при помощи стрелочных клавиш является неудобным. Для упрощения навигации по данным существует компонент BindingNavigator. Поместим его на форме (рис. 51).

Рис. 51. Компонент BindingNavigator на форме

Данный компонент позволяет осуществлять навигацию между записями таблицы, добавлять и удалять строки таблицы. Возможности и внешний вид компонента можно настраивать, так как он представляет собой полосу меню ToolStripContainer.

Свойством, определяющим таблицу, по которой производится навигация, является свойство BindingSource. Установим значение этого свойства равным «туристыBindingSource». В работе компонент выглядит следующим образом (рис. 52).

Рис. 52. Компонент BindingNavigator в работе

Редактирование данных в ячейках компонента DataGridView при соответствующих настройках возможно, но неудобно и не рационально. В частности, трудно проверять введенные значения на ошибки. Поэтому для таблицы «Туристы» сделаем экранную форму, позволяющую отображать данные в компонентах TextBox и редактировать их. Для этого разместим на форме контейнер типа Panel, а на нем три компонента TextBox следующим образом (рис. 53).

Рис. 53. Экранная панель для редактирования записей таблицы «Туристы»

Теперь необходимо осуществить привязку компонентов TextBox к соответствующим полям таблицы «Туристы». Для этого используем свойство из группы DataBindings - Advanced, показанное на рисунке 54.

Рис. 54. Свойство «DataBindings - Advanced»

Выбор данного свойства приводит к появлению диалога, показанного на рисунке 55. Данный диалог позволяет осуществить не только привязку данных, но также задать событие, в рамках которого будет проводиться обновление данных, а также форматирование данных при их выводе.

Для верхнего компонента TextBox в выпадающем списке Binding выберем источником данных «туристыBmdmgSource» и поле источника - «Фамилия». Для среднего и нижнего компонентов TextBox выберем тот же источник данных и поля «Имя» и «Отчество» соответственно.

Разработанное приложение в работе выглядит следующим образом (рис. 56).

Рис. 55. Окно диалога для свойства «DataBindings - Advanced»

Рис. 56. Привязка данных к визуальным компонентам

Однако при внесении изменений все новые данные остаются только на форме. В базе данных они не сохраняются, и при повторном вызове приложения, конечно же, будут отсутствовать. Это происходит потому, что данные были загружены в объект DataSet, который представляет собой копию таблицы в памяти. Все действия выполняются с этой копией. Для того чтобы изменения отобразились в базе данных, необходимо выполнить метод Update класса TableAdapter. Таким образом, в разрабатываемом приложении необходимо разместить кнопку «Обновить» и записать в обработчик события Click следующий программный код:

туристыTableAdapteгUpdate(bDTur_firmDataSet); информация_о_туристахTableAdapter.Update(bDTur_firmDataSet);

Данный код обновляет информацию в таблицах «Туристы» и «Информация о туристах», предоставляемых источником данных. Отметим, что данный метод является перегруженным, и его варианты позволяют обновлять как отдельную строку таблицы, так и группу строк.

Создадим простое приложение баз данных, которое выводит на экранную форму информацию из таблицы «Туристы» и связанную с текущей записью таблицы «Туристы» запись таблицы «Информация о туристах» из базы данных Microsoft Access.

Для этого создадим пустое Windows-приложение. Внешний вид среды

разработки приведен на рисунке 39 .

Рис. 39. Пустое приложение

На рисунке 39 выделена группа компонентов «Данные» («Data»), которая содержит компоненты для доступа к данным и манипулирования ими.

Привязку данных БД к форме осуществляет компонент «Binding Source». Перенесем его на форму. После размещения его на форме среда разработки принимает следующий вид (рис. 40).

Рис. 40. Компонент Binding Source на форме

Компонент является не визуальным, поэтому он отображается на дополнительной панели. Основным свойством компонента является свойство DataSource, указывающее на источник данных. По умолчанию свойство является пустым, поэтому необходимо сформировать его значение. При выборе данного свойства в окне свойств появляется следующее окно (рис. 41).

Рис. 41. Список источников данных

В настоящий момент список пуст, поэтому необходимо создать новый источник данных, выбрав команду «Add Project Data Source» для создания нового источника данных и соединения с ним. Появляется следующее окно диалога (рис. 42).

Рис. 42. Список источников данных

Данный диалог предоставляет следующий выбор источников данных:

Database - База данных;

Service - Служба, это некоторый сервис, предоставляющий данные. Чаще всего это Web-сервис;

Object - Объект для выбора объекта, который будет генерировать данные и объекты для работы с ними.

В нашем случае необходимо выбрать пункт «База данных» («Database»). Появляется окно выбора соединения с данными (рис. 43).

Рис. 43. Выбор соединения с данными

Целью данного диалога является создание строки соединения, в которой будут описаны параметры соединения для механизма ADO, такие как тип базы данных, ее местонахождение, имена пользователей, средства безопасности и пр.

В выпадающем списке диалога находятся все создаваемые ранее соединения. Если необходимого соединения в списке нет, то следует использовать кнопку «Создать подключение» («New connection»). Нажатие кнопки приводит к появлению следующего диалога (рис. 44).

В данном диалоге выбирается тип источника данных (в данном случае Microsoft Access), имя базы данных (в данном случае имя и местоположение файла базы данных), имя пользователя и пароль, используемые для подключения к базе данных. Кнопка «Дополнительно» («Advanced») позволяет задать большое количество параметров, относящихся к различным деталям механизма ADO. Использование кнопки «Проверить подключение» («Test Connection») позволит убедиться в правильности введенных параметров и работоспособности соединения.

Рис. 44. Создание нового соединения

Последний шаг диалога - выбор тех таблиц или иных объектов базы данных, которые необходимы в данном источнике данных. Окно выбора представлено на рисунке 45.

Рис. 45. Выбор необходимых таблиц

В данном окне выбраны таблицы «Туристы» и «Информация о туристах». Поскольку иных объектов, кроме таблиц, в базе данных не было создано, на рисунке 45 отображаются только таблицы. На этом создание источника данных завершено. После нажатия кнопки «Готово» («Finish») рядом с компонентом BindingSource на форме появляется компонент DataSet.

Теперь данные, подключенные выше, необходимо отобразить на форме. Простейшим способом отображения данных является использование компонента DataGridView из группы компонентов Data. Компонент является визуальным и на форме выглядит следующим образом (рис. 46).

Рис. 46. Компонент DataGridView

Сразу же возникает окно настройки компонента, которое определяет его возможности по редактированию данных: «Включить редактирование» («Enable Adding»), «Включить правку» («Enable Editing»), «Включить удаление» («Enable Deleting»); возможность изменения последовательности столбцов: «Включить возможность изменения порядка столбцов» («Enable Column Reordering»); а также возможность закрепления в контейнере-родителе.

Для того чтобы компонент мог отображать данные, необходимо выбрать источник данных в выпадающем списке. Выбор выпадающего списка приводит к появлению следующего диалога (рис. 47).

Рис. 47. Выбор источника данных для DataGridView

В данном случае мы выбрали в качестве источника данных таблицу «Туристы». Данный выбор изменяет экранную форму следующим образом (рис. 48).

Рис. 48. Компонент DataGridView отображает структуру таблицы

На рисунке видно, что появился еще один компонент BindingSource и компонент TableAdapter, работающий с таблицей «Туристы». Обратите внимание, что в design-time или в процессе разработки данные из таблицы не отображаются.

Теперь необходимо отобразить данные из связанной таблицы «Информация о туристах». Для этого разместим на форме еще один компонент DataGridView и в качестве источника данных выберем следующее (рис. 49).

Рис. 49. Выбор источника данных для второго DataGridView

Здесь в качестве источника данных выступает не сама таблица «Информация о туристах», а связь (Binding Source) между таблицами «Туристы» и «Информация о туристах». Такой выбор гарантирует выбор из таблицы «Информация о туристах» только тех строк, которые связаны с текущей строкой в таблице «Туристы». Также такой выбор гарантирует правильность обновления и удаления связанных данных. Работа полученного приложения показана на рисунке 50.

Рис. 50. Приложение базы данных в работе

Перемещение по данным при помощи стрелочных клавиш является неудобным. Для упрощения навигации по данным существует компонент BindingNavigator. Поместим его на форме (рис. 51).

Рис. 51. Компонент BindingNavigator на форме

Данный компонент позволяет осуществлять навигацию между записями таблицы, добавлять и удалять строки таблицы. Возможности и внешний вид компонента можно настраивать, так как он представляет собой полосу меню ToolStripContainer.

Свойством, определяющим таблицу, по которой производится навигация, является свойство BindingSource. Установим значение этого свойства равным «туристыBindingSource». В работе компонент выглядит следующим образом (рис. 52).

Рис. 52. Компонент BindingNavigator в работе

Редактирование данных в ячейках компонента DataGridView при соответствующих настройках возможно, но неудобно и не рационально. В частности, трудно проверять введенные значения на ошибки. Поэтому для таблицы «Туристы» сделаем экранную форму, позволяющую отображать данные в компонентах TextBox и редактировать их. Для этого разместим на форме контейнер типа Panel, а на нем три компонента TextBox следующим образом (рис. 53).

Рис. 53. Экранная панель для редактирования записей таблицы «Туристы»

Теперь необходимо осуществить привязку компонентов TextBox к соответствующим полям таблицы «Туристы». Для этого используем свойство из группы DataBindings - Advanced, показанное на рисунке 54.

Рис. 54. Свойство «DataBindings - Advanced»

Выбор данного свойства приводит к появлению диалога, показанного на рисунке 55. Данный диалог позволяет осуществить не только привязку данных, но также задать событие, в рамках которого будет проводиться обновление данных, а также форматирование данных при их выводе.

Для верхнего компонента TextBox в выпадающем списке Binding выберем источником данных «туристыBmdmgSource» и поле источника - «Фамилия». Для среднего и нижнего компонентов TextBox выберем тот же источник данных и поля «Имя» и «Отчество» соответственно.

Разработанное приложение в работе выглядит следующим образом (рис. 56).

Рис. 55. Окно диалога для свойства «DataBindings - Advanced»

Рис. 56. Привязка данных к визуальным компонентам

Однако при внесении изменений все новые данные остаются только на форме. В базе данных они не сохраняются, и при повторном вызове приложения, конечно же, будут отсутствовать. Это происходит потому, что данные были загружены в объект DataSet, который представляет собой копию таблицы в памяти. Все действия выполняются с этой копией. Для того чтобы изменения отобразились в базе данных, необходимо выполнить метод Update класса TableAdapter. Таким образом, в разрабатываемом приложении необходимо разместить кнопку «Обновить» и записать в обработчик события Click следующий программный код:

туристыTableAdapteгUpdate(bDTur_firmDataSet); информация_о_туристахTableAdapter.Update(bDTur_firmDataSet);

Данный код обновляет информацию в таблицах «Туристы» и «Информация о туристах», предоставляемых источником данных. Отметим, что данный метод является перегруженным, и его варианты позволяют обновлять как отдельную строку таблицы, так и группу строк.


Close