МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ИС КУРСОВАЯ РАБОТА по дисциплине «Управление данными» Тема: Разработка приложения для работы с базой данных для работников регистратуры поликлиники Вариант 14 Студент гр. 7363 Сухов Р. А. Преподаватель Татарникова Т.М. Санкт-Петербург 2019 ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ Студент Сухов Р.А. Группа 7363 Тема работы: Разработка приложения для работы с базой данных для работников регистратуры поликлиники. Исходные данные: Спроектировать базу данных, построить программу, обеспечивающую взаимодействие с ней в режиме диалога, для работников управления торговли. В БД хранятся сведения о больных: ФИО, адрес, диагноз (может быть уточнен), дате заболевания; сведения о врачах: ФИО, номер кабинета, номер участка, дни и часы приёма; описание болезней: название (диагноз), симптомы, лекарство. Возможно появление новых больных. Врач может уволиться из поликлиники. Содержание пояснительной записки: Аннотация, содержание, введение, анализ предметной области, обоснование выбора модели данных, обоснование выбора СУБД, описание функций групп пользователей, описание функций управления данными, организация защиты БД, заключение, список использованных источников, руководство пользователя БД, листинг программного кода. Предполагаемый объём пояснительной записки: Не менее 20 страниц. Дата выдачи задания: 24.10.2019 Дата сдачи реферата: 23.12.2019 Дата защиты реферата: 23.12.2019 Студент гр. 7363 Сухов Р.А. Преподаватель Татарникова Т.М. 2 АННОТАЦИЯ Данная работа заключается в формировании практических навыков проектирования баз данных. В ходе выполнения данной курсовой работы была спроектирована и разработана база данных, связанная с работой регистратуры в поликлиники, а также реализовано приложение с графическим интерфейсом на языке программирования С#, которое позволяет работать с этой базой данных. SUMMARY This course work consists in the formation of practical skills in database design. In the course of this course work, databases related to working registration in clinics were designed and obtained, and a graphical interface application for the C# programming language was implemented that allows you to work with this database. 3 СОДЕРЖАНИЕ ВВЕДЕНИЕ ........................................................................................................... 5 1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ ........................................................... 6 2. ОБОСНОВАНИЕ МОДЕЛИ ДАННЫХ ........................................................ 6 3. ОБОСНОВАНИЕ ВЫБОРА СУБД................................................................. 7 4. ОПИСАНИЕ ФУНКЦИЙ ГРУПП ПОЛЬЗОВАТЕЛЕЙ ............................... 7 5. ОПИСАНИЕ ФУНКЦИЙ УПРАВЛЕНИЯ ДАННЫМИ ............................. 8 6. ОРГАНИЗАЦИЯ ЗАЩИТЫ БД...................................................................... 8 ЗАКЛЮЧЕНИЕ .................................................................................................... 9 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ......................................... 10 ПРИЛОЖЕНИЕ 1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ............................... 11 ПРИЛОЖЕНИЕ 2. ЛИСТИНГ ПРОГРАММНОГО КОДА ........................... 14 4 ВВЕДЕНИЕ Работа регистратуры поликлиники предполагает наличие значительных объёмов информации о больных и их заболеваниях, о врачах, об их графике работы и об их пациентах, также требуется вести отчётность о работе поликлиники: количество обуславливается острая больных, заболеваний, необходимость в врачей. Тем упорядоченном самым хранении информации в электронном виде, что гарантирует удобство для работников регистратуры. Таким образом, создание реляционной базы данных является оптимальным решением для поликлиники. 5 1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ Проектирование базы данных осуществляется для работников поликлиники. В базе данных определены следующие сущности: пациенты, диагнозы, врачи. Атрибуты сущностей: идентификационный номер, ФИО, адрес, дата заболевания, диагноз, лечащий врач; идентификационный номер, название, симптомы и лечение; идентификационный номер, ФИО, номер кабинета и участка, дни и часы приёма. Работникам регистратуры могут потребоваться следующие сведения: адрес, дата заболевания, диагноз данного больного; ФИО лечащего врача данного больного; номер кабинета, дни и часы приёма данного врача; больные, находящиеся на лечении у данного врача; симптомы данного заболевания и рекомендуемое лекарство. Увольнять врача, изменять диагноз и вносить информацию о новом пациенте может только администратор. Предусмотрена выдача справки о болезни любого больного и отчёта о работе поликлиники, который предусматривает информирование о количестве больных, ФИО каждого врача и число лечащихся у него больных, количестве заболеваний по каждому виду болезни, расписании работы врачей поликлиники. 2. ОБОСНОВАНИЕ МОДЕЛИ ДАННЫХ Для реализации базы данных была выбрана реляционная модель, так как данные в таком случае представлены объектов и связей между ними в виде таблиц, что в наивысшей мере подходит для данного варианта задания. Данная модель характерна простотой и доступностью для понимания конечным пользователем, а также наличием математического аппарата для работы с отношениями. Реляционная модель базы данных обладает следующими свойствами: 1. Каждый элемент таблицы соответствует одному элементу данных. 2. Все столбцы в таблице однородные. 3. Каждый столбец имеет уникальное имя. 6 4. Одинаковые строки в таблице отсутствуют. 5. Порядок следования строк и столбцов может быть произвольным. Все отношения данного проекта БД приведены к 4-й нормальной форме, так как они находятся в Нормальной Форме Бойса-Кодда, то есть каждая нетривиальная и неприводимая слева функциональная зависимость обладает потенциальным ключом в качестве детерминанта, и все нетревиальные многозначные зависимости фактически являются функциональными зависимостями от её потенциальных ключей. 3. ОБОСНОВАНИЕ ВЫБОРА СУБД В качестве СУБД для данной курсовой работы используется MySQL. Она поддерживает SQL и может применяться в качестве SQL-сервера, отличается быстродействием, безопасностью и надёжностью. Также данная СУБД бесплатна и имеет открытый исходный код, что позволяет добавлять пользовательские надстройки. При реализации приложения для работы с базой данных была использована библиотека mysql для языка программирования C#. 4. ОПИСАНИЕ ФУНКЦИЙ ГРУПП ПОЛЬЗОВАТЕЛЕЙ При работе с базой данных в приложении пользователи делятся на две группы: сотрудники (employee) и администратор (admin). Сотрудник регистратуры может запрашивать следующую информацию (SELECT): 1) адрес, дата заболевания, диагноз данного больного; 2) ФИО лечащего врача данного больного; 3) номер кабинета, дни и часы приёма данного врача; 4) больные, находящиеся на лечении у данного врача; 5) симптомы данного заболевания и рекомендуемое лекарство. Администратор БД может вносить следующие изменения: 1) появление нового больного (INSERT); 2) увольнение врача (DELETE); 3) изменение диагноза (UPDATE). 7 5. ОПИСАНИЕ ФУНКЦИЙ УПРАВЛЕНИЯ ДАННЫМИ Функции управления данными: 1. Хранение – создание информационных объектов «Пациенты», «Диагнозы», «Врачи». 2. Манипулирование данными – добавление нового пациента, обновление диагноза, увольнение врача, получение запрашиваемой информации. 3. Доступ к данным – ограничение прав доступа путём авторизации в приложении. Управление данными осуществляется с помощью SQL-запросов, которые отправляются приложением на сервер, – процедура осуществляется вариативно и зависит от действий пользователя. Получение справки и отчёта происходит путём создания текстового файла с последующей записью необходимой информации в этот файл. 6. ОРГАНИЗАЦИЯ ЗАЩИТЫ БД При проектировании и создании исходной базы данных бы соблюдены все ограничения целостности: для каждого информационного объекта строго определены типы данных его атрибутов, первичные ключи таблиц, а также обеспечены ссылочная целостность БД. Для разграничения прав и доступа к БД создана таблица «users», куда были занесены логин и пароль для администратора и сотрудника соответственно. При запуске приложения необходимо авторизоваться, что и является обеспечением необходимой безопасности БД. Также следует осуществлять резервное копирование информации, находящейся в БД при каждом её обновлении со стороны администратора. 8 ЗАКЛЮЧЕНИЕ В ходе выполнения данной курсовой работы на основе языка SQL, СУБД MySQL была спроектирована и создана реляционная база данных, содержащая информацию о пациентах, диагнозах и врачах, а также разработано приложение с графическим интерфейсом на языке программирования С# для работы с ней. Функционал разделен на две группы пользователей, предусмотрена возможность выдачи отчета о болезни любого больного и справки о работе поликлиники. Аномалии отсутствуют, безопасность гарантирована, поддерживается весь требуемый функционал. 9 базы данных СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Онлайн курс по дисциплине «Управление данными» // open.etu.ru (Тататрникова Т.М.). 2. Конспект лекций онлайн-курса по дисциплине «Управление данными» // open.etu.ru (Тататрникова Т.М.). 3. MySQL. Справочник по языку. : Издательский дом «Вильямс», 2005. – 432 с. 4. Руководство по программированию на https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/. 10 C# // ПРИЛОЖЕНИЕ 1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 1. Краткое описание программы: Данная программа предназначена для работы с базой данных для работников поликлиники. 2. Минимальные системные требования: Процессор Pentium с частотой 233 МГц или более быстрый (рекомендуется не менее 300 МГц); не менее 64 МБ оперативной памяти (рекомендуется не менее 128 МБ); не менее 1,5 ГБ свободного места на жестком диске; видеокарта и монитор, поддерживающие режим Super VGA с разрешением не менее чем 800x600 точек. 3. Установка программы: Переместите папку WindowsFormData в произвольную директорию, запустите скрипт sql удобным способом. На компьютере должен быть установлен MySQL Server. 4. Запуск программы: Запустите файл WindowsFormData.exe. 5. Работа с программой: При запуске программы пользователю необходимо авторизоваться, как показано на рисунке 1. Рисунок 1 – Авторизация пользователя Далее, работа с программой осуществляется на интуитивно понятном уровне, так как графическим интерфейсом предусмотрено описание всех манипуляций. На рисунке 2 изображён интерфейс пользователя «employee». 11 Рисунок 2 – Интерфейс сотрудника поликлиники На рисунках 3, 4, 5, 6 продемонстрирован интерфейс администратора. Рисунок 3 – Интерфейс администратора Рисунок 4 – Добавление нового пациента 12 Рисунок 5 – Увольнение врача Рисунок 6 – Обновление диагноза 13 ПРИЛОЖЕНИЕ 2. ЛИСТИНГ ПРОГРАММНОГО КОДА using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; MySql.Data.MySqlClient; namespace WindowsFormData { public partial class AdminInterface : Form { public AdminInterface() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Application.Exit(); } private void DeleteButton_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlDataAdapter adapter = new MySqlDataAdapter(); MySqlCommand command = new MySqlCommand(("DELETE FROM doctors WHERE fullname = @fn"), db.getConnection()); command.Parameters.Add("@fn", MySqlDbType.VarChar).Value = remove.Text; command.Dispose(); if (command.ExecuteNonQuery() == 0) { MessageBox.Show("Unlucky!!!"); } db.CloseConnection(); } private void UpdButton_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand getval = new MySqlCommand(("SELECT idDiagnosis FROM diagnosis WHERE nameDiag = @dg"), db.getConnection()); 14 getval.Parameters.Add("@dg", MySqlDbType.VarChar).Value = patDiag.Text; MySqlDataReader reader = getval.ExecuteReader(); reader.Read(); string idDiagStr = reader[0].ToString(); //int idDiag = Int32.Parse(idDiagStr); getval.Dispose(); MessageBox.Show(idDiagStr); MySqlCommand command = new MySqlCommand(("UPDATE patients SET Diagnosis_idDiagnosis = @iddg WHERE idSick = @idSk"), db.getConnection()); command.Parameters.Add("@iddg", MySqlDbType.VarChar).Value = idDiagStr; command.Parameters.Add("@idSk", MySqlDbType.VarChar).Value = idSick.Text; command.Dispose(); if (command.ExecuteNonQuery() == 0) { MessageBox.Show("Unlucky!!!"); } db.CloseConnection(); reader.Close(); } private void Insert_Click(object sender, EventArgs e) private void button4_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand command = new MySqlCommand(("SELECT * FROM patients"), db.getConnection()); MySqlDataReader reader = command.ExecuteReader(); List<string[]> data = new List<string[]>(); while(reader.Read()) { data.Add(new string[6]); data[data.Count - 1][0] = reader[0].ToString(); data[data.Count - 1][1] = reader[1].ToString(); data[data.Count - 1][2] = reader[2].ToString(); data[data.Count - 1][3] = reader[3].ToString(); data[data.Count - 1][4] = reader[4].ToString(); data[data.Count - 1][5] = reader[5].ToString(); } reader.Close(); db.CloseConnection(); foreach (string[] s in data) dataGridView1.Rows.Add(s); db = null; command = null; reader = null; data = null; } 15 private void ClearBut_Click(object sender, EventArgs e) { dataGridView1.Rows.Clear(); } private void InsertPatient_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlDataAdapter adapter = new MySqlDataAdapter(); MySqlCommand command = new MySqlCommand(("INSERT INTO patients (fullname, address, data_of_illness, Diagnosis_idDiagnosis, Doctors_idDoctors) VALUES (@fn, @ad, @dt, @idDg, @idDoc)"), db.getConnection()); command.Parameters.Add("@fn", MySqlDbType.VarChar).Value = fullname.Text; command.Parameters.Add("@ad", MySqlDbType.VarChar).Value = address.Text; command.Parameters.Add("@dt", MySqlDbType.VarChar).Value = dataillness.Text; command.Parameters.Add("@idDg", MySqlDbType.VarChar).Value = diagnosis.Text; command.Parameters.Add("@idDoc", MySqlDbType.VarChar).Value = Doctors.Text; command.Dispose(); if (command.ExecuteNonQuery() == 0) { MessageBox.Show("Unlucky!!!"); } db.CloseConnection(); command = null; adapter = null; db = null; } private void button6_Click(object sender, EventArgs e) { dataGridView2.Rows.Clear(); } private void button5_Click(object sender, EventArgs e) { dataGridView3.Rows.Clear(); } private void button2_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); 16 MySqlCommand command = new MySqlCommand(("SELECT * FROM diagnosis"), db.getConnection()); MySqlDataReader reader = command.ExecuteReader(); List<string[]> data = new List<string[]>(); while (reader.Read()) { data.Add(new string[4]); data[data.Count - 1][0] = reader[0].ToString(); data[data.Count - 1][1] = reader[1].ToString(); data[data.Count - 1][2] = reader[2].ToString(); data[data.Count - 1][3] = reader[3].ToString(); } reader.Close(); db.CloseConnection(); foreach (string[] s in data) dataGridView2.Rows.Add(s); db = null; command = null; reader = null; data = null; } private void button3_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand command = new MySqlCommand(("SELECT * FROM doctors"), db.getConnection()); MySqlDataReader reader = command.ExecuteReader(); List<string[]> data = new List<string[]>(); while (reader.Read()) { data.Add(new string[5]); data[data.Count - 1][0] = reader[0].ToString(); data[data.Count - 1][1] = reader[1].ToString(); data[data.Count - 1][2] = reader[2].ToString(); data[data.Count - 1][3] = reader[3].ToString(); data[data.Count - 1][4] = reader[4].ToString(); } reader.Close(); db.CloseConnection(); foreach (string[] s in data) dataGridView3.Rows.Add(s); db = null; command = null; reader = null; data = null; } } } using System; using System.Collections.Generic; 17 using using using using using using using using using System.ComponentModel; System.Data; System.Drawing; System.IO; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; MySql.Data.MySqlClient; namespace WindowsFormData { public partial class UserInterface : Form { public UserInterface() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Application.Exit(); } private void label1_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); db db2 = new db(); db2.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); if (db2.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand count = new MySqlCommand(("SELECT COUNT(*) FROM patients"), db.getConnection()); string wr = "Total patients: " + count.ExecuteScalar(); string path = @"C:\Users\Роман\Desktop\Report.txt"; using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } count = new MySqlCommand(("SELECT fullname FROM doctors"), db.getConnection()); MySqlDataReader reader = count.ExecuteReader(); MySqlCommand us = null; while(reader.Read()) { us = new MySqlCommand(("SELECT COUNT(*) FROM patients WHERE Doctors_idDoctors = (SELECT idDoctors FROM doctors WHERE fullname = @fn)"), db2.getConnection()); us.Parameters.Add("@fn", MySqlDbType.VarChar).Value = reader[0].ToString(); 18 wr = "Name of doctor: " + reader[0].ToString() + ", amount of patients: " + us.ExecuteScalar() + "."; using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } } reader.Close(); count = new MySqlCommand(("SELECT nameDiag FROM diagnosis"), db.getConnection()); reader = count.ExecuteReader(); while (reader.Read()) { us = new MySqlCommand(("SELECT COUNT(*) FROM patients WHERE Diagnosis_idDiagnosis = (SELECT idDiagnosis FROM diagnosis WHERE nameDiag = @nd)"), db2.getConnection()); us.Parameters.Add("@nd", MySqlDbType.VarChar).Value = reader[0].ToString(); wr = "Name of diagnosis: " + reader[0].ToString() + ", number of disease: " + us.ExecuteScalar() + "."; using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } } reader.Close(); count = new MySqlCommand(("SELECT fullname, time_of_receipt FROM doctors"), db.getConnection()); reader = count.ExecuteReader(); using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine("Doctors shedule:"); } while (reader.Read()) { wr = reader[0].ToString() + " - " + reader[1].ToString(); using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } } reader.Close(); db.CloseConnection(); db2.CloseConnection(); } private void label2_Click(object sender, EventArgs e) { Patient.Items.Clear(); db db = new db(); 19 db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand getdiag = new MySqlCommand(("SELECT nameDiag, symptomps, medicines FROM diagnosis WHERE idDiagnosis = (SELECT Diagnosis_idDiagnosis FROM patients WHERE fullname = @idDg)"), db.getConnection()); getdiag.Parameters.Add("@idDg", MySqlDbType.VarChar).Value = fullname.Text; MySqlDataReader readerdiag = getdiag.ExecuteReader(); readerdiag.Read(); string DiagStr = readerdiag[0].ToString(); string diagStr1 = readerdiag[1].ToString(); string diagStr2 = readerdiag[2].ToString(); readerdiag.Close(); MySqlCommand command = new MySqlCommand(("SELECT address, data_of_illness FROM patients WHERE fullname = @fn"), db.getConnection()); command.Parameters.Add("@fn", MySqlDbType.VarChar).Value = fullname.Text; MySqlDataReader reader = command.ExecuteReader(); reader.Read(); string EndStr = "Address is " + reader[0].ToString() + ", data of illness is " + reader[1].ToString() + ", diagnosis is " + DiagStr; Patient.Items.Add(EndStr); reader.Close(); MySqlCommand getdoc = new MySqlCommand(("SELECT fullname, cabinet, time_of_receipt, idDoctors FROM doctors WHERE idDoctors = (SELECT Doctors_idDoctors FROM patients WHERE fullname = @idDoc)"), db.getConnection()); getdoc.Parameters.Add("@idDoc", MySqlDbType.VarChar).Value = fullname.Text; MySqlDataReader readdoc = getdoc.ExecuteReader(); readdoc.Read(); string idDoc = readdoc[3].ToString(); string DocName = "The Doctor is " + readdoc[0].ToString() + ", cabinet is " + readdoc[1].ToString() + ", time of receipt is " + readdoc[2].ToString(); readdoc.Close(); Patient.Items.Add(DocName); MySqlCommand getpat = new MySqlCommand(("SELECT fullname FROM patients WHERE Doctors_idDoctors = @idDoct"), db.getConnection()); getpat.Parameters.Add("@idDoct", MySqlDbType.VarChar).Value = idDoc; MySqlDataReader readpat = getpat.ExecuteReader(); Patient.Items.Add("Doctor's patients:\n"); while (readpat.Read()) { Patient.Items.Add(Convert.ToString(readpat["fullname"])); } readpat.Close(); Patient.Items.Add("Symptomps and treatment:\n"); 20 Patient.Items.Add(diagStr1); Patient.Items.Add(diagStr2); db.CloseConnection(); } private void label4_Click(object sender, EventArgs e) { //... } private void UserInterface_Load(object sender, EventArgs e) { //... } private void label3_Click(object sender, EventArgs e) { db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); MySqlCommand getdiag = new MySqlCommand(("SELECT nameDiag FROM diagnosis WHERE idDiagnosis = (SELECT Diagnosis_idDiagnosis FROM patients WHERE fullname = @fn)"), db.getConnection()); getdiag.Parameters.Add("@fn", MySqlDbType.VarChar).Value = fnPat.Text; if (getdiag.ExecuteScalar() == null) { string wr = fnPat.Text + ":\n" + "No diagnosis"; string path = @"C:\Users\Роман\Desktop\Diagnosis.txt"; using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } } else { string wr = fnPat.Text + ":\n" + getdiag.ExecuteScalar(); string path = @"C:\Users\Роман\Desktop\Diagnosis.txt"; using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default)) { sw.WriteLine(wr); } } db.CloseConnection(); } } } using System; 21 using using using using using System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; MySql.Data.MySqlClient; namespace WindowsFormData { class db { MySqlConnection connection = new MySqlConnection("server=localhost;port=3306;username=root;password=ac bbe5b4;database=mydb"); public void OpenConnection() { if (connection.State == System.Data.ConnectionState.Closed) connection.Open(); } public void CloseConnection() { if (connection.State == System.Data.ConnectionState.Open) connection.Close(); } public MySqlConnection getConnection() { return connection; } } } using using using using using using using using using using MySql.Data.MySqlClient; System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; namespace WindowsFormData { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { String username = UserField.Text; String password = PassField.Text; String un = "admin"; 22 db db = new db(); db.OpenConnection(); if (db.getConnection() == null) MessageBox.Show("Didn't connect!"); DataTable table = new DataTable(); MySqlDataAdapter adapter = new MySqlDataAdapter(); MySqlCommand command = new MySqlCommand(("SELECT * FROM users WHERE Username = @un AND Password = @pw"), db.getConnection()); command.Parameters.Add("@un", MySqlDbType.VarChar).Value = username; command.Parameters.Add("@pw", MySqlDbType.VarChar).Value = password; adapter.SelectCommand = command; adapter.Fill(table); if (table.Rows.Count > 0) { if (UserField.Text == un) { this.Hide(); AdminInterface adm = new AdminInterface(); adm.Show(); } else { this.Hide(); UserInterface us = new UserInterface(); us.Show(); } } else MessageBox.Show("Doesn't exist!"); db.CloseConnection(); } } } 23