Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: LI Международной научно-практической конференции «Наука вчера, сегодня, завтра» (Россия, г. Новосибирск, 14 июня 2017 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Гайнанова Р.Ш. РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ РАБОТЫ С БАЗАМИ ДАННЫХ // Наука вчера, сегодня, завтра: сб. ст. по матер. LI междунар. науч.-практ. конф. № 11(45). – Новосибирск: СибАК, 2017. – С. 29-38.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ РАБОТЫ С БАЗАМИ ДАННЫХ

Гайнанова Роза Шакирзяновна

преподаватель кафедры Общеобразовательных дисциплин Казанского национального исследовательского технологического университета,

РФ, г. Казань

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 просматривать, изменять таблицу «Туристы», вставлять новые строки и удалять устаревшие данные [1, с.291].

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

GRANT SELECT, UPDATE, INSERT, DELETE

ON Туристы

TO Menedger;

Аналогичная инструкция создается для работы с таблицей «Путевки». Чтобы предоставить менеджеру право изменять только один столбец таблицы «Туры» после имени таблицы в скобках указывается имя изменяемого столбца Туры (Количество_мест). Предоставляемые операции 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;

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

private void button1_Click(object sender, EventArgs e)

{

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;

conn.Open();

cmReader = cmdkod.ExecuteReader();

if (!cmReader.Read())

{

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

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

return;

}

else

{

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();

conn.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 [3, с.358]. Если данные о пользователе введены правильно, меню и кнопка «Сменить пользователя» становятся доступными. Кнопка «Войти» становится недоступным. Элементы 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, указывающее на источник данных [2, с.37].

После завершения подключения таблиц к источникам данных в программном коде формы появляется обработчик события 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 является его недоразвитый интерфейс пользователя.  С помощью процедурных языков можно создавать удобные интерфейсы ввода и просмотра данных [1, с.312]. Самый распространенный метод объединения 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с.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.