Учебный интернет-магазин на C#: работа с Microsoft SQL Server через ADO.NET, без ORM
Go to file
2026-10-05 06:05:28 +05:00
AdoNetShop Add .gitignore, exclude bin/obj from repository 2026-10-05 06:05:28 +05:00
database Initial commit: ADO.NET Lab Application 2026-10-05 06:02:05 +05:00
.gitignore Add .gitignore, exclude bin/obj from repository 2026-10-05 06:05:28 +05:00
AdoNetShop.slnx Initial commit: ADO.NET Lab Application 2026-10-05 06:02:05 +05:00
README.md Initial commit: ADO.NET Lab Application 2026-10-05 06:02:05 +05:00

AdoNetShop: Твоя первая лабораторная по ADO.NET 🎓

Привет! Это учебный проект интернет-магазина. Его главная цель — показать тебе, как работает технология ADO.NET изнутри. Мы будем общаться с базой данных Microsoft SQL Server "вручную", без всяких умных прослоек вроде Entity Framework. Это нужно, чтобы ты понял самые основы.


📚 Немного скучной (но нужной) теории простыми словами

Что вообще такое ADO.NET?

Представь, что твоя программа (на C#) и база данных (SQL Server) говорят на разных языках и живут в разных городах. ADO.NET — это набор инструментов (переводчиков, почтальонов, телефонов), которые позволяют им общаться. Мы не используем ORM (Entity Framework), потому что ORM делает всё за тебя "под капотом". В этой лабе мы лезем под капот сами.

Зачем мы это учим?

  1. Чтобы понимать, как всё работает на самом деле. Любая крутая ORM в итоге всё равно превращает свой код в команды ADO.NET.
  2. Скорость и контроль. Иногда нужно написать супер-хитрый и быстрый запрос. Ручной 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: Готовим Базу Данных

  1. Убедись, что у тебя установлен Microsoft SQL Server (подойдет версия Express) и программа для управления им, например, SQL Server Management Studio (SSMS).
  2. Открой папку database в этом проекте.
  3. Открой SSMS и подключись к своему серверу.
  4. Выполни скрипты строго по очереди:
    • ▶️ Сначала выполни код из файла 01_create_database.sql (Это создаст пустую БД).
    • ▶️ Затем 02_create_tables.sql (Создаст нужные таблички).
    • ▶️ Затем 03_insert_data.sql (Заполнит их тестовыми товарами и клиентами).

Шаг 2: Настраиваем проект

  1. Открой файл AdoNetShop/appsettings.json.
  2. Найди там строку ConnectionStrings -> DefaultConnection.
  3. Тебе нужно сказать программе, как зовут твой SQL сервер.
    • Если у тебя обычный разработческий SQL, оставь Server=localhost.
    • Если ты ставил SQL Server Express, скорее всего тебе нужно поменять это на Server=.\\SQLEXPRESS.

Шаг 3: Запускаем!

  1. Открой терминал (или командную строку) в папке AdoNetShop (там, где лежит файл .csproj).
  2. Напиши команду: dotnet run
  3. Должно появиться красивое консольное меню магазина.

👨‍🏫 Что показывать преподавателю на защите?

Препод точно спросит, где и как ты использовал ADO.NET. Вот твоя шпаргалка:

  1. Как ты подключаешься к базе?
    • Покажи файл Data/DbConnectionFactory.cs. Расскажи, что строку подключения ты берешь из конфига (это хорошая практика!), а не хардкодишь в коде.
  2. Как работает CRUD (Создание, Чтение, Обновление, Удаление)?
    • Открой Data/ProductRepository.cs.
    • Покажи метод GetByIdAsync. Обрати внимание на SqlCommand и то, как ты добавляешь параметры (command.Parameters.Add). Расскажи про SqlDataReader.
    • Покажи метод CreateAsync. Обрати внимание на ExecuteScalarAsync — объясни, что он нужен, чтобы база вернула тебе ID только что созданного товара.
  3. Где у тебя транзакция?
    • Гордо открывай Data/OrderRepository.cs и показывай метод CreateOrderWithTransactionAsync.
    • Объясни: "Сначала мы открываем транзакцию. Потом пытаемся создать заказ и списать товары. Если хоть одного товара нет на складе, я выбрасываю ошибку, код прыгает в блок catch, и делает RollbackAsync() — отменяет всё. Если всё гладко — CommitAsync()".
    • Для эффекта: Запусти программу, нажми пункт "8" и попробуй купить 1000 ноутбуков (их столько нет). Покажи, что заказ не создался.
  4. А где Disconnected подход (отсоединенная модель)?
    • Открой пункт меню "10" в запущенной программе.
    • Открой метод GetProductsTableAsync в ProductRepository.cs.
    • Покажи класс SqlDataAdapter и DataTable. Объясни, что курьер (адаптер) сам сбегал в базу, залил всё в таблицу и разорвал связь с БД.

Удачи на защите! Ты справишься! 💪