Загрузка данных
Понял, Visual Studio на русском — ниже те же шаги с русскими названиями пунктов меню и элементов интерфейса.
### Шаг 1. Создание проекта
1. **Файл → Создать → Проект**.
2. Выберите **Приложение Windows Forms (.NET Framework)** (C#).
3. Имя проекта: `ShopApp`, нажмите **Создать**.
4. Убедитесь, что в установщике Visual Studio отмечены компоненты **«Разработка классических приложений .NET»** и **«Обработка и хранение данных»** — иначе не будет шаблонов БД.
### Шаг 2. Создание базы данных
1. **Проект → Добавить новый элемент**.
2. Найдите шаблон **«База данных на основе служб»** (Service-based Database), назовите `ShopDB.mdf`, нажмите **Добавить**.
3. Откройте **Вид → Обозреватель объектов SQL Server** (или **Обозреватель сервера**).
4. Разверните БД, правой кнопкой по **«Таблицы»** → **«Создать запрос»**.
5. Выполните 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)
);
```
### Шаг 3. Импорт данных из Excel
**Вариант А (проще):** откройте SSMS или **Обозреватель объектов SQL Server**, подключитесь к `(LocalDB)\MSSQLLocalDB` и выполните `INSERT INTO ... VALUES ...` по данным из трёх файлов.
**Вариант Б (программно):** **Сервис → Диспетчер пакетов NuGet → Управление пакетами NuGet для решения**, установите `ClosedXML`, затем читайте Excel из C# и вставляйте строки в БД.
### Шаг 4. Форма входа (LoginForm)
1. В **Обозревателе решений** правой кнопкой по `Form1.cs` → **Переименовать** → `LoginForm.cs`.
2. Разместите на форме:
- `TextBox` — `txtLogin`
- `TextBox` — `txtPassword`, свойство **PasswordChar** = `*`
- `Button` — `btnLogin`, текст «Войти»
3. Дважды щёлкните кнопку — откроется обработчик.
```csharp
using System.Data.SqlClient;
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("Неверный логин или пароль");
}
}
}
```
### Шаг 5. Главная форма (MainForm)
1. **Проект → Добавить форму Windows Forms**, назовите `MainForm`.
2. Разместите:
- `DataGridView` — `dataGridView1`
- `ComboBox` — `cmbView` (элементы: `Товары`, `Заказы`)
- `ComboBox` — `cmbCategory` (для фильтра по категории)
- `Button` — `btnFilter`, текст «Поиск»
**Переключение таблиц:**
```csharp
string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\ShopDB.mdf;Integrated Security=True";
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;
}
}
```
**Заполнение категорий при загрузке:**
```csharp
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));
}
}
}
```
**Кнопка поиска по категории:**
```csharp
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;
}
}
```
### Перед запуском
1. Проверьте строку подключения — она должна совпадать с именем вашего `.mdf` и экземпляром LocalDB (Visual Studio обычно записывает её в `App.config`).
2. Загрузите данные в БД **до** запуска — иначе вход не сработает.
3. В `Program.cs` замените `Application.Run(new Form1());` на `Application.Run(new LoginForm());` — иначе форма входа не появится.
Если нужно — распишу вариант Б (парсинг трёх Excel через ClosedXML и вставку в БД) отдельно.