| AdoNetShop | ||
| database | ||
| AdoNetShop.slnx | ||
| README.md | ||
AdoNetShop: Твоя первая лабораторная по ADO.NET 🎓
Привет! Это учебный проект интернет-магазина. Его главная цель — показать тебе, как работает технология ADO.NET изнутри. Мы будем общаться с базой данных Microsoft SQL Server "вручную", без всяких умных прослоек вроде Entity Framework. Это нужно, чтобы ты понял самые основы.
📚 Немного скучной (но нужной) теории простыми словами
Что вообще такое ADO.NET?
Представь, что твоя программа (на C#) и база данных (SQL Server) говорят на разных языках и живут в разных городах. ADO.NET — это набор инструментов (переводчиков, почтальонов, телефонов), которые позволяют им общаться. Мы не используем ORM (Entity Framework), потому что ORM делает всё за тебя "под капотом". В этой лабе мы лезем под капот сами.
Зачем мы это учим?
- Чтобы понимать, как всё работает на самом деле. Любая крутая ORM в итоге всё равно превращает свой код в команды ADO.NET.
- Скорость и контроль. Иногда нужно написать супер-хитрый и быстрый запрос. Ручной SQL через ADO.NET даст тебе максимальную скорость.
Главные герои ADO.NET (Что нужно знать для защиты):
- 🔌
SqlConnection(Подключение): Это твой телефонный провод до базы данных. Чтобы что-то сказать базе, нужно поднять трубку (Open()), а потом обязательно положить её (Close(), или использовать конструкциюusing). - 📝
SqlCommand(Команда): Это то, что ты говоришь в трубку. Обычно это SQL-запросы (SELECT,INSERTи т.д.). - 🛡️
SqlParameter(Параметр): Это твоя защита от злодеев. Никогда не склеивай SQL-строку плюсами (типа"SELECT * FROM Users WHERE Name = " + name). Хакерам хватит 5 минут, чтобы сломать базу через SQL-инъекцию. Мы передаем переменные только через параметры (@Name). - 📖
SqlDataReader(Чтец данных): Представь, что база диктует тебе длиннющий список товаров по телефону.DataReaderслушает и записывает строку за строкой. Он работает очень быстро, но только вперед и требует, чтобы телефонная линия (Connection) была открыта. (Это называется Connected подход). - 📦
SqlDataAdapterиDataTable: А это другой подход.DataAdapter— это курьер. Он сам едет к базе, забирает все данные разом, привозит их тебе и кладет в коробку (DataTableв памяти компьютера). После этого он сам вешает трубку. Теперь ты можешь ковыряться в этой коробке сколько угодно, не занимая базу данных. (Это называется Disconnected подход). - 🤝 Транзакция (
SqlTransaction): Сделка по принципу "Всё или ничего". Представь перевод денег: списали у тебя, но не зачислили другу. Плохо! Транзакция гарантирует: если база начала делать заказ (создала заказ -> списала товары со склада -> добавила позиции), и вдруг свет моргнул на списании склада — она отменит всё обратно (Rollback). Если всё супер — закрепит (Commit).
🚀 Как запустить эту штуку на твоем компе
Чтобы проект заработал, тебе нужны две вещи: работающая база данных и запущенный код.
Шаг 1: Готовим Базу Данных
- Убедись, что у тебя установлен Microsoft SQL Server (подойдет версия Express) и программа для управления им, например, SQL Server Management Studio (SSMS).
- Открой папку
databaseв этом проекте. - Открой SSMS и подключись к своему серверу.
- Выполни скрипты строго по очереди:
- ▶️ Сначала выполни код из файла
01_create_database.sql(Это создаст пустую БД). - ▶️ Затем
02_create_tables.sql(Создаст нужные таблички). - ▶️ Затем
03_insert_data.sql(Заполнит их тестовыми товарами и клиентами).
- ▶️ Сначала выполни код из файла
Шаг 2: Настраиваем проект
- Открой файл
AdoNetShop/appsettings.json. - Найди там строку
ConnectionStrings -> DefaultConnection. - Тебе нужно сказать программе, как зовут твой SQL сервер.
- Если у тебя обычный разработческий SQL, оставь
Server=localhost. - Если ты ставил SQL Server Express, скорее всего тебе нужно поменять это на
Server=.\\SQLEXPRESS.
- Если у тебя обычный разработческий SQL, оставь
Шаг 3: Запускаем!
- Открой терминал (или командную строку) в папке
AdoNetShop(там, где лежит файл.csproj). - Напиши команду:
dotnet run - Должно появиться красивое консольное меню магазина.
👨🏫 Что показывать преподавателю на защите?
Препод точно спросит, где и как ты использовал ADO.NET. Вот твоя шпаргалка:
- Как ты подключаешься к базе?
- Покажи файл
Data/DbConnectionFactory.cs. Расскажи, что строку подключения ты берешь из конфига (это хорошая практика!), а не хардкодишь в коде.
- Покажи файл
- Как работает CRUD (Создание, Чтение, Обновление, Удаление)?
- Открой
Data/ProductRepository.cs. - Покажи метод
GetByIdAsync. Обрати внимание наSqlCommandи то, как ты добавляешь параметры (command.Parameters.Add). Расскажи проSqlDataReader. - Покажи метод
CreateAsync. Обрати внимание наExecuteScalarAsync— объясни, что он нужен, чтобы база вернула тебе ID только что созданного товара.
- Открой
- Где у тебя транзакция?
- Гордо открывай
Data/OrderRepository.csи показывай методCreateOrderWithTransactionAsync. - Объясни: "Сначала мы открываем транзакцию. Потом пытаемся создать заказ и списать товары. Если хоть одного товара нет на складе, я выбрасываю ошибку, код прыгает в блок
catch, и делаетRollbackAsync()— отменяет всё. Если всё гладко —CommitAsync()". - Для эффекта: Запусти программу, нажми пункт "8" и попробуй купить 1000 ноутбуков (их столько нет). Покажи, что заказ не создался.
- Гордо открывай
- А где Disconnected подход (отсоединенная модель)?
- Открой пункт меню "10" в запущенной программе.
- Открой метод
GetProductsTableAsyncвProductRepository.cs. - Покажи класс
SqlDataAdapterиDataTable. Объясни, что курьер (адаптер) сам сбегал в базу, залил всё в таблицу и разорвал связь с БД.
Удачи на защите! Ты справишься! 💪