Как готовиться по этому сайту
Прогресс
На что делать главный упор
По логике демонстрационного экзамена самые дорогие места — это не «просто создать базу», а чтобы приложение реально подключалось к 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. | Не теряешь баллы на оформлении. |
Тест по экзамену
Выбери ответы и нажми «Проверить». После проверки объяснения появятся под вопросами. Ошибки попадут в отчёт.
Результат
Пока не проверено.
SQL-практика
Пиши команды руками. Проверка простая: сайт ищет ключевые части запроса. На экзамене названия таблиц могут отличаться, но механика та же.
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 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 |
|---|---|---|
| LoginForm | 2 TextBox, 2 Button | txtLogin, txtPassword, btnLogin, btnGuest |
| ProductsForm | Label для ФИО, Labels для товара, DataGridView, TextBox поиска | lblUser, lblName, lblPrice, lblCategory, dgvProducts, txtSearch |
| ProductEditForm | TextBox, NumericUpDown, ComboBox, Button | txtName, nudPrice, cmbCategory, btnSave |
Кнопку подключай двойным кликом. Visual Studio сама создаст метод btnLogin_Click или похожий.
Чек-лист готовности
Отмечай только то, что можешь сделать сам руками без подсказки. Нечестно отмеченные пункты потом аукнутся на экзамене.
Готовность
Пока ничего не отмечено.
Максимально простая инструкция: от нуля до работающего приложения
Эта инструкция сделана под твою цель: «чтобы просто работало». Поэтому здесь не самый идеальный архитектурный вариант, а самый понятный для экзамена.
1. DBeaver → SQL Server
- Открой DBeaver → Database → New Database Connection.
- Выбери SQL Server.
- Host попробуй:
localhost, потомlocalhost\SQLEXPRESS, потом(localdb)\MSSQLLocalDB. - Authentication: лучше Windows Authentication.
- В Driver properties поставь
trustServerCertificate=true. - Нажми Test Connection. Должно быть Connected.
2. Создание базы и таблиц
- Создай базу:
CREATE DATABASE ShopDB; - Правый клик по базе → Set as default.
- Сначала создай справочники:
Category,Role,Supplier. - Потом основные таблицы:
[User],Product,[Order],OrderItem. - Проверь:
SELECT * FROM Product;
3. Минимальная тренировочная БД
Такую БД можно создать дома для тренировки. На экзамене названия будут другие, но принцип тот же.
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)
);
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
- Create a new project → Windows Forms App (.NET Framework).
- Framework: 4.7.2 или 4.8.
- NuGet: установи
System.Data.SqlClient. - Создай формы:
LoginForm,ProductsForm, при необходимостиProductEditForm. - В
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
- На форму кинь Label:
lblName,lblPrice,lblCategory. - В коде формы добавь
using System.Data.SqlClient;. - Вставь метод
LoadProductToLabels(1);и вызови его в конструкторе послеInitializeComponent();.
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;";
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();
}
}
}
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;
}
try
{
// код работы с БД
}
catch (Exception ex)
{
MessageBox.Show("Ошибка: " + ex.Message);
}
Ошибки и быстрый ремонт
| Ошибка | Что проверить |
|---|---|
| Не подключается DBeaver | trustServerCertificate=true, имя сервера, запущен ли SQL Server. |
| Cannot open database | В строке подключения не то имя базы или сервера. |
| ???? вместо русского текста | Забыл N перед строкой: N'текст'. |
| Invalid object name User | Пиши [User]. |
| FOREIGN KEY constraint | Сначала вставь данные в справочник, потом в основную таблицу. |
| Программа вылетает | Оберни код в try/catch и покажи MessageBox. |
Отчёт по подготовке
Нажми «Обновить отчёт», скопируй текст и отправь мне. Я по нему скажу, что именно добить перед экзаменом.