Посилання на 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)