Тренажёр ДЭ: SQL Server + DBeaver + Windows Forms

Открой этот файл в браузере и пройди подготовку как мини-экзамен: база, SQL, подключение, авторизация, вывод данных в Label/DataGridView, CRUD и финальная сдача. Всё работает офлайн и сохраняет прогресс в браузере.

без сервера с отчётом для ChatGPT код под .NET Framework / C# под твою идею: строка подключения прямо в форме

Как готовиться по этому сайту

Пройди тестОн покажет, где слабые места: БД, SQL, Windows Forms, авторизация, SELECT, CRUD или финальная сдача.
Напиши SQL рукамиВ разделе «SQL-практика» проверяются базовые команды: CREATE TABLE, FK, INSERT с N, SELECT JOIN, авторизация, проверка перед DELETE.
Сгенерируй код WinFormsВведи свой сервер и базу. Получишь простые заготовки: подключение, вход, вывод данных в Label, таблицу DataGridView, ComboBox, INSERT/UPDATE/DELETE.
Отметь чек-лист экзаменаТак ты увидишь, что уже можешь сделать без подсказки, а что надо повторить.
Собери отчётСайт сформирует текст: что получилось, где ошибки, что повторить. Его можно скопировать и отправить мне.

Прогресс

Тест
0%
SQL-практика
0%
Чек-лист
0%

На что делать главный упор

По логике демонстрационного экзамена самые дорогие места — это не «просто создать базу», а чтобы приложение реально подключалось к SQL Server, авторизовывало пользователя, выводило данные из таблиц и не падало при ошибках. В твоём случае главный минимум: DBeaver → SQL Server → Windows Forms → авторизация → SELECT → вывод в Label/DataGridView.

1. База

Таблицы, PK/FK, справочники, INSERT, SELECT.

2. Подключение

Строка подключения, SqlConnection, SqlCommand, try/catch.

3. Авторизация

SELECT по login/password через параметры @login/@password.

4. Вывод

Reader → Labels, Adapter → DataGridView, ComboBox → справочник.

Мини-план на 2–3 вечера

ВремяЧто сделатьРезультат
40–60 минСоздать тренировочную БД ShopDB, 3–5 таблиц, INSERT-данные.Ты не боишься DBeaver и SQL Server.
60–90 минWindows Forms: LoginForm + ProductsForm, подключение в коде формы.Работает вход и открывается вторая форма.
60 минВывести один товар в Label и список в DataGridView.Ты умеешь делать SELECT из формы.
60–90 минComboBox + поиск TextChanged + простая форма добавления/редактирования.Готовность к модулю 3.
30 минER, блок-схема, скриншоты, GitHub, бэкап SQL.Не теряешь баллы на оформлении.

Тест по экзамену

Выбери ответы и нажми «Проверить». После проверки объяснения появятся под вопросами. Ошибки попадут в отчёт.

БДDBeaverWindows FormsSELECT в LabelCRUDФинал

Результат

0%

Пока не проверено.

SQL-практика

Пиши команды руками. Проверка простая: сайт ищет ключевые части запроса. На экзамене названия таблиц могут отличаться, но механика та же.

Главная мысль: сначала справочники, потом основные таблицы. Русский текст в SQL Server вставляй через N'текст'. Таблицы [User] и [Order] пиши в квадратных скобках.

Быстрые SQL-шаблоны

Создать базу
CREATE DATABASE ShopDB;
-- Потом правый клик по базе в DBeaver → Set as default
Справочник
CREATE TABLE Category (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(100) NOT NULL UNIQUE
);
Товар со связью
CREATE TABLE Product (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(200) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    quantity INT NOT NULL DEFAULT 0,
    category_id INT NOT NULL,
    CONSTRAINT FK_Product_Category
        FOREIGN KEY (category_id) REFERENCES Category(id)
);
SELECT для вывода товара
SELECT TOP 1
    p.id,
    p.name,
    p.price,
    p.quantity,
    c.name AS category_name
FROM Product p
LEFT JOIN Category c ON p.category_id = c.id
WHERE p.id = @id;
Авторизация
SELECT TOP 1 id, full_name, role_id
FROM [User]
WHERE login = @login AND password = @password;

WinForms-кодогенератор

Введи свои названия сервера, базы и колонок. Ниже появятся заготовки кода. Я сделал вариант без App.config: строка подключения находится прямо внутри каждой формы.

Самый простой безопасный стиль: вверху класса формы объявить private readonly string connectionString = @"...";, а в обработчиках кнопок использовать using SqlConnection, using SqlCommand и параметры @login, @id.

Настройки под твою БД

Что кинуть на формы

ФормаЭлементыИмена в Properties → Name
LoginForm2 TextBox, 2 ButtontxtLogin, txtPassword, btnLogin, btnGuest
ProductsFormLabel для ФИО, Labels для товара, DataGridView, TextBox поискаlblUser, lblName, lblPrice, lblCategory, dgvProducts, txtSearch
ProductEditFormTextBox, NumericUpDown, ComboBox, ButtontxtName, nudPrice, cmbCategory, btnSave

Кнопку подключай двойным кликом. Visual Studio сама создаст метод btnLogin_Click или похожий.

Чек-лист готовности

Отмечай только то, что можешь сделать сам руками без подсказки. Нечестно отмеченные пункты потом аукнутся на экзамене.

Готовность

0%

Пока ничего не отмечено.

Максимально простая инструкция: от нуля до работающего приложения

Эта инструкция сделана под твою цель: «чтобы просто работало». Поэтому здесь не самый идеальный архитектурный вариант, а самый понятный для экзамена.

Не пытайся сразу сделать красиво и сложно. Сначала добейся, чтобы: база создалась, данные вставились, форма подключилась, логин проверился, SELECT вывел данные. Только потом добавляй дизайн и улучшения.

1. DBeaver → SQL Server

  1. Открой DBeaver → Database → New Database Connection.
  2. Выбери SQL Server.
  3. Host попробуй: localhost, потом localhost\SQLEXPRESS, потом (localdb)\MSSQLLocalDB.
  4. Authentication: лучше Windows Authentication.
  5. В Driver properties поставь trustServerCertificate=true.
  6. Нажми Test Connection. Должно быть Connected.

2. Создание базы и таблиц

  1. Создай базу: CREATE DATABASE ShopDB;
  2. Правый клик по базе → Set as default.
  3. Сначала создай справочники: Category, Role, Supplier.
  4. Потом основные таблицы: [User], Product, [Order], OrderItem.
  5. Проверь: SELECT * FROM Product;

3. Минимальная тренировочная БД

Такую БД можно создать дома для тренировки. На экзамене названия будут другие, но принцип тот же.

db_init.sql
CREATE DATABASE ShopDB;
GO
USE ShopDB;
GO

CREATE TABLE Role (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE Category (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE [User] (
    id INT IDENTITY(1,1) PRIMARY KEY,
    login NVARCHAR(50) NOT NULL UNIQUE,
    password NVARCHAR(50) NOT NULL,
    full_name NVARCHAR(150) NOT NULL,
    role_id INT NOT NULL,
    CONSTRAINT FK_User_Role FOREIGN KEY (role_id) REFERENCES Role(id)
);

CREATE TABLE Product (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(200) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    quantity INT NOT NULL DEFAULT 0,
    category_id INT NOT NULL,
    CONSTRAINT FK_Product_Category FOREIGN KEY (category_id) REFERENCES Category(id)
);

CREATE TABLE OrderItem (
    id INT IDENTITY(1,1) PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    CONSTRAINT FK_OrderItem_Product FOREIGN KEY (product_id) REFERENCES Product(id)
);
db_data.sql
INSERT INTO Role (name) VALUES (N'Администратор'), (N'Менеджер');
INSERT INTO Category (name) VALUES (N'Ноутбуки'), (N'Мониторы'), (N'Клавиатуры');

INSERT INTO [User] (login, password, full_name, role_id)
VALUES
(N'admin', N'123', N'Иванов Иван Иванович', (SELECT id FROM Role WHERE name=N'Администратор')),
(N'manager', N'123', N'Петров Пётр Петрович', (SELECT id FROM Role WHERE name=N'Менеджер'));

INSERT INTO Product (name, price, quantity, category_id)
VALUES
(N'Ноутбук Acer', 55000, 5, (SELECT id FROM Category WHERE name=N'Ноутбуки')),
(N'Монитор 24', 12000, 8, (SELECT id FROM Category WHERE name=N'Мониторы')),
(N'Клавиатура', 1500, 20, (SELECT id FROM Category WHERE name=N'Клавиатуры'));

4. Visual Studio

  1. Create a new project → Windows Forms App (.NET Framework).
  2. Framework: 4.7.2 или 4.8.
  3. NuGet: установи System.Data.SqlClient.
  4. Создай формы: LoginForm, ProductsForm, при необходимости ProductEditForm.
  5. В Program.cs поменяй Application.Run(new Form1()); на Application.Run(new LoginForm());.

5. Строка подключения прямо в форме

Внутри класса формы, сразу после строки public partial class LoginForm : Form, вставь:

private readonly string connectionString = @"Server=localhost\SQLEXPRESS;Database=ShopDB;Trusted_Connection=True;TrustServerCertificate=True;";

Если в DBeaver подключался к localhost, то и здесь пиши localhost. Если к localhost\SQLEXPRESS, пиши так же.

6. Как сделать SELECT и вывести данные в Label

  1. На форму кинь Label: lblName, lblPrice, lblCategory.
  2. В коде формы добавь using System.Data.SqlClient;.
  3. Вставь метод LoadProductToLabels(1); и вызови его в конструкторе после InitializeComponent();.
SELECT → Labels
private void LoadProductToLabels(int productId)
{
    string sql = @"SELECT TOP 1 p.name, p.price, c.name AS category_name
                   FROM Product p
                   LEFT JOIN Category c ON p.category_id = c.id
                   WHERE p.id = @id";

    try
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            command.Parameters.AddWithValue("@id", productId);
            connection.Open();

            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (reader.Read())
                {
                    lblName.Text = reader["name"].ToString();
                    lblPrice.Text = reader["price"].ToString();
                    lblCategory.Text = reader["category_name"].ToString();
                }
                else
                {
                    MessageBox.Show("Товар не найден");
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Ошибка БД: " + ex.Message);
    }
}

Маленькая шпаргалка на экзамен

Сохрани отдельно или распечатай через кнопку «Печать / PDF». Здесь только самое нужное.

DBeaver / SQL Server

  • Host: localhost или localhost\SQLEXPRESS.
  • Driver properties: trustServerCertificate=true.
  • Создать БД: CREATE DATABASE ShopDB;
  • Сделать активной: правый клик по БД → Set as default.
  • Русский текст: N'Пример'.
  • [User] и [Order] — в квадратных скобках.
  • Проверка данных: SELECT COUNT(*) FROM Product;

Типы данных

  • INT — целое число.
  • IDENTITY(1,1) — автономер.
  • NVARCHAR(100) — русский текст.
  • DECIMAL(10,2) — цена.
  • DATE — дата.
  • BIT — да/нет.
  • FOREIGN KEY — связь с другой таблицей.

Самые нужные куски C#

Подключение
using System.Data;
using System.Data.SqlClient;

private readonly string connectionString = @"Server=localhost\SQLEXPRESS;Database=ShopDB;Trusted_Connection=True;TrustServerCertificate=True;";
SELECT с параметром
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("SELECT name, price FROM Product WHERE id=@id", connection))
{
    command.Parameters.AddWithValue("@id", 1);
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        if (reader.Read())
        {
            lblName.Text = reader["name"].ToString();
            lblPrice.Text = reader["price"].ToString();
        }
    }
}
DataGridView
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Product", connection))
{
    DataTable table = new DataTable();
    adapter.Fill(table);
    dgvProducts.DataSource = table;
}
MessageBox + try/catch
try
{
    // код работы с БД
}
catch (Exception ex)
{
    MessageBox.Show("Ошибка: " + ex.Message);
}

Ошибки и быстрый ремонт

ОшибкаЧто проверить
Не подключается DBeavertrustServerCertificate=true, имя сервера, запущен ли SQL Server.
Cannot open databaseВ строке подключения не то имя базы или сервера.
???? вместо русского текстаЗабыл N перед строкой: N'текст'.
Invalid object name UserПиши [User].
FOREIGN KEY constraintСначала вставь данные в справочник, потом в основную таблицу.
Программа вылетаетОберни код в try/catch и покажи MessageBox.

Отчёт по подготовке

Нажми «Обновить отчёт», скопируй текст и отправь мне. Я по нему скажу, что именно добить перед экзаменом.