Проект адміністративної панелі бази даних для ринку (Веб)

pic

Посилання на GitHub: https://github.com/enescidem/Web-DB-System

Проект

Цей проект є додатком для панелі адміністрування, яка дозволяє менеджерам ринку легко керувати інформацією про продукти, клієнтів, замовлення та постачальників.

Він пропонує систему управління ринком, розроблену за допомогою базових SQL-запитів у базі даних MySQL, разом з такими складними техніками, як INNER JOIN, LEFT JOIN, збереженими процедурами та тригерами.

Мета проекту

Метою цього проекту є створення зручної у використанні системи через панель управління ринком. Проект дозволяє адміністраторам:

  • Ефективно керувати базою даних ринку,
  • Додавати, оновлювати та видаляти інформацію про продукти,
  • Відновлювати видалені продукти з записів,
  • Відстежувати та шукати інформацію про клієнтів,
  • Переглядати та аналізувати записи замовлень,
  • Організовувати та керувати інформацією про постачальників.

Технології

  • Мова програмування: C#
  • База даних: MySQL
  • Інструменти: Visual Studio IDE
  • Відносини між базами даних: INNER JOIN, LEFT JOIN, TRIGGER, STORED PROCEDURE
  • UI: ASP.NET Web Forms

ER діаграма

pic

Відносини між таблицями

pic

Атрибути, позначені іконкою ключа, є ПЕРШОДЖЕРЕЛЬНИМИ КЛЮЧАМИ.

Малі кола на кінцях стрілок вказують на те, що ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ однієї таблиці використовується як ЗОВНІШНІЙ КЛЮЧ в іншій таблиці, що позначено більшими колами.

Приклад: ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ KategoriID з таблиці urunkategoritbl стає ЗОВНІШНІМ КЛЮЧЕМ з тим самим ім'ям у таблиці urunlertbl.

pic

pic

pic

У таблиці siparistbl атрибут SiparisNo налаштовано на автоінкремент. Крім того, MusteriTelefon має відношення до атрибуту MusteriTelefon в таблиці musteritbl, а UrunBarkodNo має відношення до атрибуту UrunBarkodNo в таблиці urunlertbl.

pic

TF_ID у таблиці tedarikcifirmatbl має автоінкремент.

pic

KategoriID у таблиці urunkategoritbl має автоінкремент.

pic

UrunBarkodNo у таблиці uruntbl має автоінкремент, із значенням за замовчуванням 0 для атрибута UrunStok.
pic

Про проект

Цей проект є додатком для панелі адміністрування, яка дозволяє менеджерам ринку легко керувати інформацією про продукти, клієнтів, замовлення та постачальників.

Він пропонує систему управління ринком, розроблену за допомогою базових SQL-запитів у базі даних MySQL, разом з такими складними техніками, як INNER JOIN, LEFT JOIN, збереженими процедурами та тригерами.

Мета проекту

Метою цього проекту є створення зручної у використанні системи через панель управління ринком. Проект дозволяє адміністраторам:

  • Ефективно керувати базою даних ринку,
  • Додавати, оновлювати та видаляти інформацію про продукти,
  • Відновлювати видалені продукти з записів,
  • Відстежувати та шукати інформацію про клієнтів,
  • Переглядати та аналізувати записи замовлень,
  • Організовувати та керувати інформацією про постачальників.

Технології

  • Мова програмування: C#
  • База даних: MySQL
  • Інструменти: Visual Studio IDE
  • Відносини між базами даних: INNER JOIN, LEFT JOIN, TRIGGER, STORED PROCEDURE
  • UI: ASP.NET Web Forms

ER діаграма

pic

Відносини між таблицями

pic

Атрибути, позначені іконкою ключа, є ПЕРШОДЖЕРЕЛЬНИМИ КЛЮЧАМИ.

Малі кола на кінцях стрілок вказують на те, що ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ однієї таблиці використовується як ЗОВНІШНІЙ КЛЮЧ в іншій таблиці, що позначено більшими колами.

Приклад: ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ KategoriID з таблиці urunkategoritbl стає ЗОВНІШНІМ КЛЮЧЕМ з тим самим ім'ям у таблиці urunlertbl.

pic

pic

pic

У таблиці siparistbl атрибут SiparisNo налаштовано на автоінкремент. Крім того, MusteriTelefon має відношення до атрибуту MusteriTelefon в таблиці musteritbl, а UrunBarkodNo має відношення до атрибуту UrunBarkodNo в таблиці urunlertbl.

pic

TF_ID у таблиці tedarikcifirmatbl має автоінкремент.

pic

KategoriID у таблиці urunkategoritbl має автоінкремент.

pic

UrunBarkodNo у таблиці uruntbl має автоінкремент, із значенням за замовчуванням 0 для атрибута UrunStok.

Сторінка продуктів

pic

SQL-запит для відображення таблиці

public partial class Urunler : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();   
 }   
 private void TabloYukle()   
 {   
 //СОЗДАНИЕ SQL ЗАПРОСА ПРИ ЗАГРУЗКЕ СТРАНИЦЫ ДЛЯ ЗАПОЛНЕНИЯ GRIDVIEW   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT yenitbl.UrunBarkodNo, yenitbl.UrunAd, yenitbl.UrunStok, yenitbl.KategoriAdi, yenitbl.KategoriID , tedarikcifirmatbl.TF_İsim, yenitbl.TF_ID FROM tedarikcifirmatbl INNER JOIN (SELECT `UrunBarkodNo`, `UrunAd`, `UrunStok`, urunkategoritbl.KategoriAdi, urunlertbl.KategoriID , `TF_ID` FROM `urunlertbl` INNER JOIN urunkategoritbl ON urunlertbl.KategoriID=urunkategoritbl.KategoriID) AS yenitbl ON tedarikcifirmatbl.TF_ID=yenitbl.TF_ID", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count > 0)   
 {   
 UrunlerGW.DataSource = dt;   
 UrunlerGW.DataBind();   
 }   
 }

У цьому блоці коду команда SELECT отримує таблицю, яку ми створили в базі даних, і передає її в UrunlerGW GridView. Потім викликається функція TabloYukle() під час Page_Load.

У цьому запиті підзапит (SELECT UrunBarkodNo, UrunAd, UrunStok, urunkategoritbl.KategoriAdi, urunlertbl.KategoriID, TF_ID FROM urunlertbl INNER JOIN urunkategoritbl ON urunlertbl.KategoriID = urunkategoritbl.KategoriID) генерує таблицю з ім'ям yenitbl в:

PHPMYADMIN MYSQL Система керування базами даних:

pic

З цього підзапиту створюється таблиця з ім'ям yenitbl, і загальний запит генерує:

pic

Тут підзапит об'єднує три таблиці за допомогою операції JOIN для формування об'єднаної таблиці.

Додавання продукту

protected void ButtonEkle_Click(object sender, EventArgs e) {   
 //ДОДАВАННЯ ЧЕРЕЗ КНОПКУ ДОДАТИ ЗА ДОПОМОГОЮ ІНСТРУКЦІЇ INSERT   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("insert into urunlertbl(UrunAd, UrunStok, KategoriID, TF_ID) values('"+TextBoxUrunAd.Text+ "' , '" +Convert.ToInt64(TextBoxStok.Text)+ "' , '" + Convert.ToInt32(TextBoxKategori.Text) + "', '" + Convert.ToInt32(TextBoxTedarikci.Text) + "');", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Додавання успішне";   
 TabloYukle();   
 }

У цій частині я перетворюю дані, отримані з текстових полів, у відповідні типи даних і вставляю їх у базу даних за допомогою запиту INSERT. Потім я викликаю функцію LoadTable(), щоб оновити таблицю.
Простий процес додавання виглядає наступним чином:

pic

Після процесу додавання з'являється наступна сторінка.

Оновлення продукту

protected void ButtonGüncelle_Click(object sender, EventArgs e) {   
 //ОНОВЛЕННЯ ЧЕРЕЗ КНОПКУ ОНОВИТИ ЗА ДОПОМОГОЮ SQL ЗАПИТУ   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("UPDATE urunlertbl SET UrunAd='" + TextBoxUrunAd.Text + "', UrunStok='" + Convert.ToInt64(TextBoxStok.Text) + "', KategoriID='" + Convert.ToInt32(TextBoxKategori.Text) + "', TF_ID='" + Convert.ToInt32(TextBoxTedarikci.Text) + "' WHERE UrunBarkodNo='" + Convert.ToInt32(TextBoxBarkod.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Оновлення успішне";   
 TabloYukle();   
 }

У цьому розділі я перетворюю дані, отримані з текстових полів, на правильні типи даних і оновлюю запис у базі даних, який відповідає введеному номеру штрих-коду. Процес оновлення виглядає наступним чином:

pic

Після процесу оновлення таблиця виглядає так, як показано вище.

Видалення продукту

protected void ButtonSil_Click(object sender, EventArgs e) {   
 //ВИДАЛЕННЯ ЧЕРЕЗ КНОПКУ ВИДАЛИТИ ЗА ДОПОМОГОЮ SQL ЗАПИТУ І ТРИГЕРА, ЯКИЙ ВСТАНОВЛЮЄ ВИДАЛЕНИЙ ПРОДУКТ У ТАБЛИЦІ deletedproducttbl ПЕРЕД ВИДАЛЕННЯМ
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("DELETE FROM urunlertbl WHERE UrunBarkodNo='" + Convert.ToInt32(TextBoxBarkod.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Видалення успішне";   
 TabloYukle();   
 }

У цьому розділі виконується операція DELETE, де номер штрих-коду, введений у текстове поле, порівнюється з ProductBarcodeNo в базі даних. Під час цього процесу використовується TRIGGER, щоб вставити видалений продукт у таблицю deletedproducttbl до виконання операції DELETE (операція BEFORE DELETE).

Запит TRIGGER, який я написав:

pic

Давайте виконаємо просту операцію видалення:

pic

Після процесу видалення таблиця виглядає наступним чином. Тепер перейдемо до сторінки Видалених продуктів, яка стосується цієї операції.

Сторінка видалених продуктів

pic

Як ми бачимо, видалені продукти були перенесені в таблицю. Давайте розглянемо SQL-запит, який отримує цю таблицю.

SQL-запит для отримання таблиці

public partial class Silinen_Ürünler : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();   
 }   
 private void TabloYukle()   
 {   
 //СОЗДАНИЕ SQL ЗАПРОСА ДЛЯ ПЕРЕНЕСЕННЯ ДАНИХ У GRIDVIEW (ТАБЛИЦЮ)   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT * FROM silinenurunlertbl", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count >= 0)   
 {   
 SilinenUrunlerGW.DataSource = dt;   
 SilinenUrunlerGW.DataBind();   
 }   
 }

У цьому блоці коду команда SELECT переносить таблицю deletedproducttbl, створену в базі даних, у GridView DeletedProductsGW (Таблиця).
Тоді функція LoadTable() викликається під час події Page_Load.

Відновлення видалених продуктів

protected void ButtonGeriYukle_Click(object sender, EventArgs e) {   
 //КНОПКА ВІДНОВИТИ ОТРИМУЄ SQL ЗАПИТ ДЛЯ ВСТАНОВЛЕННЯ ПРИДУТЕНОГО ПРОДУКТУ   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("insert into urunlertbl(UrunBarkodNo, UrunAd, UrunStok, KategoriID, TF_ID) values('" +Convert.ToInt32(TextBoxBarkod.Text) + "' ,'" + TextBoxUrunAd.Text + "' , '" + Convert.ToInt64(TextBoxStok.Text) + "' , '" + Convert.ToInt32(TextBoxKategori.Text) + "', '" + Convert.ToInt32(TextBoxTedarikci.Text) + "');", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 read.Close();   
 //І ВИДАЛЕННЯ ЗАПИСУ З ТАБЛИЦІ   
 MySqlCommand cmd1 = new MySqlCommand("DELETE FROM silinenurunlertbl WHERE UrunBarkodNo='" + Convert.ToInt32(TextBoxBarkod.Text) + "';", con);   
 MySqlDataReader read1;   
 read1 = cmd1.ExecuteReader();   
 LabelSonuc.Text = "Відновлення успішне";   
 TabloYukle();   
 }

У цьому блоці коду, коли натискається кнопка Відновити, дані продукту з текстових полів спочатку вставляються в таблицю producttbl. Потім відповідний запис видаляється з таблиці deletedproducttbl за допомогою запиту DELETE.

Коли дані введено і натискається кнопка Відновити продукт, результат виглядає наступним чином:

Сторінка видалених продуктів:

pic

  • Сторінка продуктів:

pic

Як ми бачимо, продукт було видалено зі сторінки Видалених продуктів і знову додано на сторінку Продуктів.

Сторінка клієнтів

pic

SQL-запит для отримання таблиці

private void TabloYukle() {   
 //Коли сторінка завантажується, SQL-запит для перенесення значень в GridView (Таблицю)   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT * FROM musteritbl ORDER BY MusteriAdi", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count > 0)   
 {   
 MusterilerGW.DataSource = dt;   
 MusterilerGW.DataBind();   
 }   
 }

У цьому блоці коду команда SELECT отримує таблицю customertbl, створену в базі даних. Запит використовує ORDER BY для сортування стовпця CustomerName в алфавітному порядку (за замовчуванням по зростанню, оскільки ASC передбачається). Дані потім передаються в CustomersGW GridView (Таблицю). Нарешті, функція LoadTable() викликається під час події Page_Load.

SQL-запит для отримання загальної кількості клієнтів

public partial class Musteriler : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();//Завантажуємо таблицю під час завантаження сторінки.   
 //SQL-запит для отримання загальної кількості клієнтів   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 con.Open();   
 MySqlCommand cmd = new MySqlCommand("SELECT count(MusteriAdi) as musteritoplam FROM musteritbl", con);   
 MySqlDataReader read = cmd.ExecuteReader();   
 read.Read();   
 LabelToplamMusteri.Text = Convert.ToString(read["musteritoplam"]);   
 }

У цьому блоці коду запит SELECT використовує функцію COUNT для визначення загальної кількості клієнтів, підраховуючи записи в стовпці CustomerName.
Результат отримує псевдонім (totalcustomers) і відображається на етикетці.

Пошук клієнтів

protected void TextBoxAra_TextChanged(object sender, EventArgs e) {   
 //Пошук клієнтів за значеннями, введеними в текстовому полі, за допомогою SQL-запиту і передачі результатів у GridView (Таблицю)   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT * FROM musteritbl WHERE MusteriAdi LIKE '" + TextBoxAra.Text + "%'", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 MusterilerGW.DataSource = dt;   
 MusterilerGW.DataBind();   
 con.Close();   
 }

У цьому блоці коду команда SELECT отримує всі рядки з таблиці customertbl. Однак умова WHERE застосовує фільтр LIKE до стовпця CustomerName, використовуючи символ підстановки %, щоб знайти записи, що відповідають пошуковому терміну, введеному в SearchTextBox.
Наприклад, введення “a” в поле пошуку виконає запит a% і поверне всіх клієнтів, чиї імена починаються з “a”.

Приклад операції пошуку:

pic

Сторінка замовлень

pic

SQL-запит для отримання таблиці

private void TabloYukle() {   
 //Коли сторінка завантажується, SQL-запит для перенесення значень у GridView (Таблицю)   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT s.SiparisNo,m.MusteriAdi,m.MusteriSoyadi,m.MusteriTelefon, u.UrunAd, s.SatilanUrunAdedi FROM urunlertbl AS u, siparistbl AS s, musteritbl AS m WHERE u.UrunBarkodNo=s.UrunBarkodNo AND s.MusteriTelefon=m.MusteriTelefon ORDER BY S.SatilanUrunAdedi DESC", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count > 0)   
 {   
 SiparislerGW.DataSource = dt;   
 SiparislerGW.DataBind();   
 }   
 }

Цей блок коду містить досить довгий SQL-запит. Спочатку таблицям producttbl, ordertbl та customertbl надаються псевдоніми (p, o і c відповідно). Потім команда SELECT визначає стовпці, які потрібно включити в результат, наприклад, o.OrderNo. Умова WHERE співвідносить ProductBarcodeNo з таблиці producttbl з таблицею ordertbl, а також CustomerPhone з таблиці ordertbl з таблицею customertbl. Результати потім сортуються за спаданням (DESC) за стовпцем QuantitySold у таблиці ordertbl.

SQL-запит для отримання загальної кількості замовлень

public partial class Siparisler : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();//Завантажуємо таблицю під час завантаження сторінки   
 //SQL-запит для отримання загальної кількості замовлень   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 con.Open();   
 MySqlCommand cmd = new MySqlCommand("SELECT count(SiparisNo) as siparistoplam FROM siparistbl", con);   
 MySqlDataReader read = cmd.ExecuteReader();   
 read.Read();   
 LabelToplamSiparis.Text = Convert.ToString(read["siparistoplam"]);   
 }

У цьому блоці коду запит SELECT використовує функцію COUNT для підрахунку загальної кількості замовлень (OrderNo).
Результат отримує псевдонім (totalorders) і відображається на етикетці.

Сторінка категорій продуктів

pic

SQL-запит для отримання таблиці

public partial class UrunKategori : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();   
 }   

 private void TabloYukle()   
 {   
 //Коли сторінка завантажується, SQL-запит для перенесення значень у GridView (Таблицю) за допомогою VIEW   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("SELECT * FROM KategoriListesi", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count > 0)   
 {   
 UrunKategoriGW.DataSource = dt;   
 UrunKategoriGW.DataBind();   
 }   
 }

У цьому блоці коду створюється VIEW з назвою CategoryList на основі таблиці productcategorytbl. Потім, цей VIEW запитується за допомогою команди SELECT, щоб заповнити ProductCategoryGW GridView (Таблицю). Нарешті, функція LoadTable() викликається під час події Page_Load.

Створений мною VIEW:

pic

Додавання категорії продукту

protected void ButtonEkle_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку додавання, виконується INSERT-запит   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("insert into urunkategoritbl(KategoriAdi) values('" + TextBoxKategoriAd.Text + "');", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Операція додавання успішна";   
 TabloYukle();   
 }

Тут значення, введені в текстові поля, конвертуються в відповідні типи даних і вставляються в базу даних за допомогою запиту INSERT. Після цього викликається функція LoadTable(), щоб оновити таблицю. Простий процес додавання:

pic

Після додавання сторінка виглядає наступним чином:

Оновлення категорії продукту

protected void ButtonGuncelle_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку оновлення, виконується UPDATE-запит   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("UPDATE urunkategoritbl SET KategoriAdi='" + TextBoxKategoriAd.Text + "' WHERE KategoriID LIKE '" + Convert.ToInt32(TextBoxKategoriID.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Операція оновлення успішна";   
 TabloYukle();   
 }

У цьому блоці значення, введені в текстові поля, конвертуються в відповідні типи даних. База даних оновлюється шляхом співставлення CategoryID з текстового поля з відповідним CategoryID у базі даних. Потім викликається функція LoadTable(), щоб оновити таблицю. Простий процес UPDATE:

pic

Після процесу оновлення сторінка Категорії продуктів виглядає наступним чином.
Наприклад, назва категорії для CategoryID 1 була змінена з "Beverages" на "Soft Drinks". Зміни також відображаються на сторінці Продукти наступним чином:

pic

Видалення категорії продукту

protected void ButtonSil_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку "Видалити", виконується DELETE-запит   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("DELETE FROM urunkategoritbl WHERE KategoriID='" + Convert.ToInt32(TextBoxKategoriID.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Операція видалення успішна";   
 TabloYukle();   
 }

У цьому процесі, CategoryID, введений у текстове поле, видаляється з бази даних.

Простий процес DELETE:

pic

Після процесу видалення сторінка виглядає наступним чином:

pic

Це відбувається тому, що таблиці взаємопов'язані між собою.
Тут первинний ключ KategoriID з таблиці urunkategoritbl використовується як зовнішній ключ у таблиці urunlertbl. Точно так само зміни в таблиці замовлень:

pic

Як ми бачимо, кількість замовлень зменшилася з 7 до 4, і замовлення, придбані за категорією “Gazlı İçecek” (Газовані напої), були видалені.

Сторінка постачальників

pic

SQL-запит для отримання таблиці

public partial class Tedarikciler : System.Web.UI.Page {   
 protected void Page_Load(object sender, EventArgs e)   
 {   
 TabloYukle();   
 }   

 private void TabloYukle()   
 {   
 //Коли сторінка завантажується, SQL-запит для перенесення значень у GridView (Таблицю)   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlDataAdapter adp = new MySqlDataAdapter("CALL SakliYordam()", con);   
 con.Open();   
 DataTable dt = new DataTable();   
 adp.Fill(dt);   
 if (dt.Rows.Count > 0)   
 {   
 TedarikciGW.DataSource = dt;   
 TedarikciGW.DataBind();   
 }   
 }

У цьому блоці коду використовується збережена процедура. Завдяки збереженій процедурі, замість звичайного SELECT запиту, ми можемо викликати таблицю простіше та швидше, використовуючи CALL SakliYordam(). Збережена процедура, яку я написав:

pic

Додавання постачальника

protected void ButtonEkle_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку "Додати", виконується INSERT-запит   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("INSERT INTO tedarikcifirmatbl(TF_İsim, TF_Telefon, TF_Mail) VALUES('" + TextBoxTedarikciAd.Text + "' , '" + Convert.ToInt64(TextBoxTedarikciTel.Text) + "' , '" + TextBoxTedarikciMail.Text + "');", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Операція додавання успішна";   
 TabloYukle();   
 }

У цьому блоці коду ми бачимо INSERT запит. Він працює за тією ж логікою, як і попередні INSERT запити, які я пояснював. Давайте виконаємо просту операцію додавання.
Оскільки ми раніше додали "Chips" до категорій продуктів, давайте тепер додамо відповідну компанію:

pic

Оновлення постачальника

protected void ButtonGuncelle_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку "Оновити", виконується UPDATE-запит за допомогою LIKE   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("UPDATE tedarikcifirmatbl SET TF_İsim='" + TextBoxTedarikciAd.Text + "', TF_Telefon='" + Convert.ToInt64(TextBoxTedarikciTel.Text) + "', TF_Mail='" + TextBoxTedarikciMail.Text + "' WHERE TF_ID LIKE '" + Convert.ToInt32(TextBoxTedarikciID.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Оновлення успішне";   
 TabloYukle();   
 }

У цьому блоці коду дані, отримані з текстових полів, перетворюються у відповідні типи даних, після чого відбувається оновлення запису в базі даних за допомогою LIKE, де значення TF_ID з текстового поля співвідноситься з відповідним значенням у базі. Після цього викликається функція TabloYukle(), щоб оновити таблицю. Ось приклад операції UPDATE:

pic

Після операції оновлення зміни відображаються на сторінці Продукти:

pic

Це стало можливим завдяки зв'язку між таблицями. Тут первинний ключ TF_ID в таблиці tedarikcifirmatbl використовується як зовнішній ключ у таблиці urunlertbl.

Видалення постачальника

protected void ButtonSil_Click(object sender, EventArgs e) {   
 //Коли натискаємо кнопку "Видалити", виконується DELETE-запит   
 MySqlConnection con = new MySqlConnection("Server=localhost; Port=3306; Database=marketveritabani; Uid=root; Pwd='';");   
 MySqlCommand cmd = new MySqlCommand("DELETE FROM tedarikcifirmatbl WHERE TF_ID='" + Convert.ToInt32(TextBoxTedarikciID.Text) + "';", con);   
 con.Open();   
 MySqlDataReader read;   
 read = cmd.ExecuteReader();   
 LabelSonuc.Text = "Операція видалення успішна";   
 TabloYukle();   
 }

Як і в попередніх прикладах, це класична операція DELETE. Ось приклад видалення:

pic

Перекладено з: Market Admin Panel Database Project (Web)

Leave a Reply

Your email address will not be published. Required fields are marked *