Посилання на 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 діаграма
Відносини між таблицями
Атрибути, позначені іконкою ключа, є ПЕРШОДЖЕРЕЛЬНИМИ КЛЮЧАМИ.
Малі кола на кінцях стрілок вказують на те, що ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ однієї таблиці використовується як ЗОВНІШНІЙ КЛЮЧ в іншій таблиці, що позначено більшими колами.
Приклад: ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ KategoriID з таблиці urunkategoritbl стає ЗОВНІШНІМ КЛЮЧЕМ з тим самим ім'ям у таблиці urunlertbl.
У таблиці siparistbl атрибут SiparisNo налаштовано на автоінкремент. Крім того, MusteriTelefon має відношення до атрибуту MusteriTelefon в таблиці musteritbl, а UrunBarkodNo має відношення до атрибуту UrunBarkodNo в таблиці urunlertbl.
TF_ID у таблиці tedarikcifirmatbl має автоінкремент.
KategoriID у таблиці urunkategoritbl має автоінкремент.
UrunBarkodNo у таблиці uruntbl має автоінкремент, із значенням за замовчуванням 0 для атрибута UrunStok.
Про проект
Цей проект є додатком для панелі адміністрування, яка дозволяє менеджерам ринку легко керувати інформацією про продукти, клієнтів, замовлення та постачальників.
Він пропонує систему управління ринком, розроблену за допомогою базових SQL-запитів у базі даних MySQL, разом з такими складними техніками, як INNER JOIN, LEFT JOIN, збереженими процедурами та тригерами.
Мета проекту
Метою цього проекту є створення зручної у використанні системи через панель управління ринком. Проект дозволяє адміністраторам:
- Ефективно керувати базою даних ринку,
- Додавати, оновлювати та видаляти інформацію про продукти,
- Відновлювати видалені продукти з записів,
- Відстежувати та шукати інформацію про клієнтів,
- Переглядати та аналізувати записи замовлень,
- Організовувати та керувати інформацією про постачальників.
Технології
- Мова програмування: C#
- База даних: MySQL
- Інструменти: Visual Studio IDE
- Відносини між базами даних: INNER JOIN, LEFT JOIN, TRIGGER, STORED PROCEDURE
- UI: ASP.NET Web Forms
ER діаграма
Відносини між таблицями
Атрибути, позначені іконкою ключа, є ПЕРШОДЖЕРЕЛЬНИМИ КЛЮЧАМИ.
Малі кола на кінцях стрілок вказують на те, що ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ однієї таблиці використовується як ЗОВНІШНІЙ КЛЮЧ в іншій таблиці, що позначено більшими колами.
Приклад: ПЕРШОДЖЕРЕЛЬНИЙ КЛЮЧ KategoriID з таблиці urunkategoritbl стає ЗОВНІШНІМ КЛЮЧЕМ з тим самим ім'ям у таблиці urunlertbl.
У таблиці siparistbl атрибут SiparisNo налаштовано на автоінкремент. Крім того, MusteriTelefon має відношення до атрибуту MusteriTelefon в таблиці musteritbl, а UrunBarkodNo має відношення до атрибуту UrunBarkodNo в таблиці urunlertbl.
TF_ID у таблиці tedarikcifirmatbl має автоінкремент.
KategoriID у таблиці urunkategoritbl має автоінкремент.
UrunBarkodNo у таблиці uruntbl має автоінкремент, із значенням за замовчуванням 0 для атрибута UrunStok.
Сторінка продуктів
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 Система керування базами даних:
З цього підзапиту створюється таблиця з ім'ям yenitbl, і загальний запит генерує:
Тут підзапит об'єднує три таблиці за допомогою операції 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(), щоб оновити таблицю.
Простий процес додавання виглядає наступним чином:
Після процесу додавання з'являється наступна сторінка.
Оновлення продукту
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();
}
У цьому розділі я перетворюю дані, отримані з текстових полів, на правильні типи даних і оновлюю запис у базі даних, який відповідає введеному номеру штрих-коду. Процес оновлення виглядає наступним чином:
Після процесу оновлення таблиця виглядає так, як показано вище.
Видалення продукту
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, який я написав:
Давайте виконаємо просту операцію видалення:
Після процесу видалення таблиця виглядає наступним чином. Тепер перейдемо до сторінки Видалених продуктів, яка стосується цієї операції.
Сторінка видалених продуктів
Як ми бачимо, видалені продукти були перенесені в таблицю. Давайте розглянемо 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.
Коли дані введено і натискається кнопка Відновити продукт, результат виглядає наступним чином:
Сторінка видалених продуктів:
- Сторінка продуктів:
Як ми бачимо, продукт було видалено зі сторінки Видалених продуктів і знову додано на сторінку Продуктів.
Сторінка клієнтів
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”.
Приклад операції пошуку:
Сторінка замовлень
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) і відображається на етикетці.
Сторінка категорій продуктів
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:
Додавання категорії продукту
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(), щоб оновити таблицю. Простий процес додавання:
Після додавання сторінка виглядає наступним чином:
Оновлення категорії продукту
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:
Після процесу оновлення сторінка Категорії продуктів виглядає наступним чином.
Наприклад, назва категорії для CategoryID 1 була змінена з "Beverages" на "Soft Drinks". Зміни також відображаються на сторінці Продукти наступним чином:
Видалення категорії продукту
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:
Після процесу видалення сторінка виглядає наступним чином:
Це відбувається тому, що таблиці взаємопов'язані між собою.
Тут первинний ключ KategoriID з таблиці urunkategoritbl використовується як зовнішній ключ у таблиці urunlertbl. Точно так само зміни в таблиці замовлень:
Як ми бачимо, кількість замовлень зменшилася з 7 до 4, і замовлення, придбані за категорією “Gazlı İçecek” (Газовані напої), були видалені.
Сторінка постачальників
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(). Збережена процедура, яку я написав:
Додавання постачальника
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" до категорій продуктів, давайте тепер додамо відповідну компанію:
Оновлення постачальника
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:
Після операції оновлення зміни відображаються на сторінці Продукти:
Це стало можливим завдяки зв'язку між таблицями. Тут первинний ключ 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. Ось приклад видалення:
Перекладено з: Market Admin Panel Database Project (Web)