Загрузка данных
Ниже — подробная пошаговая инструкция: где создавать файлы, куда вставлять код и в каком порядке всё делать. Все названия меню — на русском Visual Studio.
---
## Часть 1. Создание проекта
1. Запустите Visual Studio.
2. **Файл → Создать → Проект**.
3. В списке шаблонов выберите **«Приложение Windows Forms (.NET Framework)»** (C#). Если не видите — в строке поиска введите `Windows Forms`.
4. Внизу:
- **Имя проекта:** `ShopApp`
- **Расположение:** любая папка (например, `D:\Учёба\ShopApp`)
5. Нажмите **«Создать»**.
6. Подождите, пока VS создаст проект. Появится пустая форма `Form1` и **Обозреватель решений** справа.
> **Обозреватель решений** — это панель справа, где видны файлы проекта: `Form1.cs`, `Program.cs`, `Properties` и т.д. Если её нет — **Вид → Обозреватель решений**.
---
## Часть 2. Создание базы данных `ShopDB.mdf`
1. В **Обозревателе решений** щёлкните правой кнопкой мыши по имени проекта **`ShopApp`** (самая верхняя строка с иконкой C#) → **Добавить → Новый элемент**.
2. В открывшемся окне слева выберите **«Данные»** (Data).
3. В центре выберите **«База данных на основе служб»** (Service-based Database).
4. В поле **Имя** внизу введите `ShopDB.mdf`.
5. Нажмите **«Добавить»**.
6. Появится предупреждение про LocalDB — нажмите **«Да»** (или «ОК»).
Теперь в Обозревателе решений появился файл `ShopDB.mdf`.
---
## Часть 3. Создание таблиц (SQL-запрос)
1. В **Обозревателе решений** дважды щёлкните по `ShopDB.mdf`. Откроется **Обозреватель сервера** (панель слева).
2. Разверните узел `ShopDB` → правой кнопкой по **«Таблицы»** → **«Создать запрос»** (New Query).
3. Откроется пустое окно с текстом. Вставьте туда весь SQL:
```sql
CREATE TABLE Users (
Id INT PRIMARY KEY,
Login NVARCHAR(50) NOT NULL,
Password NVARCHAR(50) NOT NULL
);
CREATE TABLE Products (
Id INT PRIMARY KEY,
Article NVARCHAR(20),
Category NVARCHAR(50),
Name NVARCHAR(100),
Price DECIMAL(10,2)
);
CREATE TABLE Orders (
Id INT IDENTITY(1,1) PRIMARY KEY,
UserId INT NOT NULL,
ProductId INT NOT NULL,
Quantity INT NOT NULL,
FOREIGN KEY (UserId) REFERENCES Users(Id),
FOREIGN KEY (ProductId) REFERENCES Products(Id)
);
```
4. Нажмите **«Выполнить»** (зелёный треугольник ▶ или клавиша **F5**). Внизу в «Результаты» должно быть «Команды успешно выполнены».
---
## Часть 4. Заполнение таблиц данными из Excel
1. Снова правой кнопкой по **«Таблицы»** → **«Создать запрос»**.
2. Вставьте данные из ваших трёх файлов. Пример для всех трёх таблиц сразу:
```sql
-- Пользователи (из »«½ýº«óáÔѽ¿.xlsx)
INSERT INTO Users (Id, Login, Password) VALUES
(1, 'aboba67', 'qwerty123'),
(2, 'gigaVanya2016', 'zxc123qwe'),
(3, 'admin', 'admin'),
(4, 'adolf1337', 'aaa001');
-- Товары (из Ô«óáÓÙ.xlsx)
INSERT INTO Products (Id, Article, Category, Name, Price) VALUES
(1, 'ART-001', 'Овощи', 'Картофель', 65),
(2, 'ART-002', 'Бакалея', 'Макароны', 73),
(3, 'ART-003', 'Алкоголь', 'Вино', 489),
(4, 'ART-004', 'Бакалея', 'Чипсы Лейс', 139),
(5, 'ART-005', 'Молочная продукция', 'Йогурт Даниссимо', 89),
(6, 'ART-006', 'Овощи', 'Морковь', 47),
(7, 'ART-007', 'Алкоголь', 'Пиво', 121),
(8, 'ART-008', 'Молочная продукция', 'Молоко Простоквашино', 130);
-- Заказы (из ºá¬áºÙ.xlsx)
INSERT INTO Orders (UserId, ProductId, Quantity) VALUES
(1, 1, 5),
(2, 2, 2),
(4, 3, 1),
(2, 4, 3),
(2, 5, 4),
(1, 6, 1),
(4, 7, 3),
(2, 8, 1),
(1, 2, 6),
(3, 4, 2);
```
3. Нажмите **F5** (Выполнить). Проверьте: правой кнопкой по таблице `Users` → **«Показать данные таблицы»** — должны появиться 4 строки.
---
## Часть 5. Строка подключения (connection string)
Её нужно вставить в код, чтобы программа знала, куда подключаться. Узнать её:
1. В **Обозревателе сервера** правой кнопкой по `ShopDB` → **«Свойства»**.
2. В панели «Свойства» найдите **«Строка подключения»** (Connection String). Скопируйте значение — примерно такое:
```
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\ShopDB.mdf;Integrated Security=True
```
Это значение вы будете вставлять в код в переменную `connStr` (см. ниже).
> `|DataDirectory|` — специальный плейсхолдер, VS сам подставляет путь к папке `bin\Debug`. Поэтому используйте её как есть, не меняйте на полный путь.
---
## Часть 6. Создание формы входа `LoginForm`
1. В **Обозревателе решений** найдите `Form1.cs`. Правой кнопкой → **Переименовать** → введите `LoginForm.cs` → **Enter**. VS спросит «Переименовать все ссылки?» → нажмите **«Да»**.
2. Дважды щёлкните `LoginForm.cs` — откроется конструктор формы.
3. Откройте **Панель элементов** (**Вид → Панель элементов**, обычно слева).
4. Перетащите на форму элементы:
| Элемент | Где взять | Свойство `Name` | Свойство `Text` |
|---|---|---|---|
| TextBox | Панель элементов → «Поле ввода»/TextBox | `txtLogin` | — |
| TextBox | TextBox | `txtPassword` | — |
| Button | «Кнопка»/Button | `btnLogin` | `Войти` |
5. Для `txtPassword` в окне **Свойства** (справа внизу) найдите **`PasswordChar`**, введите `*`.
6. Добавьте подписи: перетащите `Label` два раза, `Text` = `Логин` и `Пароль`.
### Куда вставлять код кнопки
1. В конструкторе **дважды щёлкните** по кнопке `Войти`. VS автоматически создаст обработчик и откроет файл `LoginForm.cs` с кодом.
2. Внутри появится:
```csharp
private void btnLogin_Click(object sender, EventArgs e)
{
// сюда вставлять код
}
```
3. Замените содержимое на:
```csharp
private void btnLogin_Click(object sender, EventArgs e)
{
string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\ShopDB.mdf;Integrated Security=True";
string sql = "SELECT COUNT(*) FROM Users WHERE Login=@login AND Password=@pass";
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@login", txtLogin.Text.Trim());
cmd.Parameters.AddWithValue("@pass", txtPassword.Text.Trim());
conn.Open();
int count = (int)cmd.ExecuteScalar();
if (count > 0)
{
var main = new MainForm();
main.Show();
this.Hide();
}
else
{
MessageBox.Show("Неверный логин или пароль");
}
}
}
```
4. В самом верху файла `LoginForm.cs` (после `using System.Windows.Forms;` и других `using`) добавьте строку:
```csharp
using System.Data.SqlClient;
```
> Если `SqlClient` подчёркнут красным и не находится, значит, не установлен NuGet-пакет. В **Обозревателе решений** правой кнопкой по проекту → **«Управление пакетами NuGet»** → вкладка «Обзор» → найдите `System.Data.SqlClient` → **«Установить»**.
---
## Часть 7. Создание главной формы `MainForm`
1. В **Обозревателе решений** правой кнопкой по проекту `ShopApp` → **Добавить → Форма Windows Forms** (не «Новый элемент», а именно пункт «Форма Windows Forms» в подменю «Добавить»).
2. В диалоге введите имя `MainForm.cs` → **«Добавить»**.
3. Перетащите на форму элементы:
| Элемент | Свойство `Name` | Свойство `Text` / настройки |
|---|---|---|
| DataGridView | `dataGridView1` | — |
| ComboBox | `cmbView` | — |
| ComboBox | `cmbCategory` | — |
| Button | `btnFilter` | `Поиск` |
4. Связывание событий:
- Дважды щёлкните по `cmbView` → создастся `cmbView_SelectedIndexChanged`.
- Дважды щёлкните по кнопке `Поиск` → создастся `btnFilter_Click`.
- Для загрузки формы: в конструкторе формы щёлкните по пустому месту (самой форме) → в окне «Свойства» нажмите значок **молнии** (события) → найдите **`Load`** → дважды щёлкните по пустому полю справа → создастся `MainForm_Load`.
5. Вставьте код (в `MainForm.cs`). Вверху добавьте `using`:
```csharp
using System.Data.SqlClient;
```
Внутри класса `MainForm` (после `public MainForm() { InitializeComponent(); }`) вставьте:
```csharp
string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\ShopDB.mdf;Integrated Security=True";
private void MainForm_Load(object sender, EventArgs e)
{
cmbView.Items.AddRange(new[] { "Товары", "Заказы" });
cmbView.SelectedIndex = 0;
string sql = "SELECT DISTINCT Category FROM Products";
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand(sql, conn))
{
conn.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
cmbCategory.Items.Add(reader.GetString(0));
}
}
}
private void cmbView_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbView.SelectedItem == null) return;
string sql;
if (cmbView.SelectedItem.ToString() == "Товары")
{
sql = "SELECT Article AS Артикул, Category AS Категория, Name AS Название, Price AS Цена FROM Products";
}
else
{
sql = @"SELECT u.Login AS Пользователь, p.Name AS Товар, o.Quantity AS Количество
FROM Orders o
JOIN Users u ON o.UserId = u.Id
JOIN Products p ON o.ProductId = p.Id";
}
using (var conn = new SqlConnection(connStr))
using (var adapter = new SqlDataAdapter(sql, conn))
{
var table = new System.Data.DataTable();
adapter.Fill(table);
dataGridView1.DataSource = table;
}
}
private void btnFilter_Click(object sender, EventArgs e)
{
if (cmbCategory.SelectedItem == null) return;
string sql = "SELECT Article AS Артикул, Category AS Категория, Name AS Название, Price AS Цена " +
"FROM Products WHERE Category=@cat";
using (var conn = new SqlConnection(connStr))
using (var adapter = new SqlDataAdapter(sql, conn))
{
adapter.SelectCommand.Parameters.AddWithValue("@cat", cmbCategory.SelectedItem.ToString());
var table = new System.Data.DataTable();
adapter.Fill(table);
dataGridView1.DataSource = table;
}
}
```
---
## Часть 8. Настройка запуска (`Program.cs`)
1. В **Обозревателе решений** дважды щёлкните `Program.cs`.
2. Найдите строку:
```csharp
Application.Run(new Form1());
```
3. Замените на:
```csharp
Application.Run(new LoginForm());
```
Теперь при запуске первым откроется окно входа.
---
## Часть 9. Запуск и проверка
1. Нажмите **F5** (или зелёный ▶ «Пуск»).
2. Откроется форма входа. Введите, например, `admin` / `admin` → **Войти**.
3. Откроется `MainForm`. В `ComboBox` выберите «Товары» — таблица с артикулами, категориями, названиями, ценами.
4. Выберите «Заказы» — таблица: Пользователь, Товар, Количество.
5. Выберите категорию, например «Овощи», нажмите **Поиск** — останутся только Картофель и Морковь.
6. Если ввели неверный логин — `MessageBox` с ошибкой.
---
## Если что-то не работает — частые причины
- **Ошибка `Cannot open database`** — не выполнен `INSERT`, либо строка подключения не совпадает с именем файла. Проверьте `Свойства → Строка подключения` у `ShopDB`.
- **`SqlConnection` не найден** — не установлен NuGet-пакет `System.Data.SqlClient` (Часть 6, шаг 7).
- **Форма `MainForm` не находится** — убедитесь, что она создана через **Добавить → Форма Windows Forms**, а не через «Новый элемент».
- **После переименования `Form1` → `LoginForm` ошибки** — в `Program.cs` должно быть `new LoginForm()`, и VS обычно спрашивает про обновление ссылок — отвечайте «Да».
Если зависните на каком-то шаге — напишите, на каком именно и что видно на экране.