Перейти к основному содержанию
EDU-MMCS
  • В начало
  • Дополнительно
Вы используете гостевой доступ
Вход
В начало
  1. Prog_3
  2. Лабораторная работа 4. Работа с БД

Лабораторная работа 4. Работа с БД

Требуемые условия завершения
Открыто с: четверг, 7 мая 2026, 00:00
Срок сдачи: четверг, 14 мая 2026, 00:00

В работе нужно создать консольную программу на C#, которая умеет хранить пользователей в базе данных.

Пользователь будет иметь:

Id
Name
Age
Email

Программа должна уметь:

1. Добавлять пользователя
2. Показывать всех пользователей
3. Искать пользователя
4. Изменять данные пользователя
5. Удалять пользователя

2. Что такое SQLite

SQLite — это база данных в виде обычного файла.

Например:

lab.db

Этот файл создаётся рядом с программой.

Внутри него хранятся таблицы и данные.

То есть SQLite не требует отдельного сервера. Это удобно для учебных проектов.


3. Что такое Entity Framework Core

Entity Framework Core — это инструмент, который позволяет работать с базой данных через обычные C# классы.

Нам не нужно писать команды для базы вручную.

Вместо этого нужно писать:

db.Users.Add(user);
db.SaveChanges();

А Entity Framework сам понимает, что нужно сохранить пользователя в базу.


4. Главная идея лабораторной работы

В этой работе важно понять связь:

Класс C# → Таблица в базе данных
Объект C# → Строка в таблице
Свойство класса → Колонка в таблице

Пример:

public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}

Это означает, что в базе будет таблица пользователей.

Примерно так:

IdNameAgeEmail
1Ivan25ivan@mail.com
2Anna30anna@mail.com

5. Создание проекта в Visual Studio
Шаг 1

Открыть Visual Studio.

Шаг 2

Нажать:

Create a new project
Шаг 3

Выбрать:

Console App
Шаг 4

Назвать проект, например:

SQLiteEfLab
Шаг 5

Нажать Create.


6. Установка нужных пакетов

Чтобы C# мог работать с SQLite через Entity Framework, нужно установить NuGet-пакеты.

В Visual Studio:

Project → Manage NuGet Packages

Во вкладке Browse установить:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools

7. Создание модели User

Создать файл:

User.cs

Вставить код:

public class User
{
public int Id { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public string Email { get; set; }
}
Объяснение

User — это пользователь.

Id — уникальный номер пользователя.

Name — имя.

Age — возраст.

Email — электронная почта


8. Создание контекста базы данных

Создать файл:

AppDbContext.cs

Вставить код:

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite("Data Source=lab.db");
}
}
Объяснение

AppDbContext — это главный класс для работы с базой.

Он управляет подключением, таблицами и сохранением данных.

public DbSet<User> Users { get; set; }

означает:

В базе данных будет набор пользователей.

UseSqlite("Data Source=lab.db") означает:

Использовать SQLite-файл lab.db.

9. Создание базы данных

В файле Program.cs написать:

using System;
using System.Linq;

class Program
{
static void Main()
{
using var db = new AppDbContext();

db.Database.EnsureCreated();

Console.WriteLine("База данных создана или уже существует.");
}
}
Объяснение
using var db = new AppDbContext();

создаёт подключение к базе данных.

db.Database.EnsureCreated();

создаёт файл базы данных и таблицы, если их ещё нет.

После запуска появится файл:

lab.db

10. Добавление пользователя

Добавим в Main:

var user = new User
{
Name = "Ivan",
Age = 25,
Email = "ivan@mail.com"
};

db.Users.Add(user);
db.SaveChanges();

Console.WriteLine("Пользователь добавлен.");
Полный код на этом этапе
using System;
using System.Linq;

class Program
{
static void Main()
{
using var db = new AppDbContext();

db.Database.EnsureCreated();

var user = new User
{
Name = "Ivan",
Age = 25,
Email = "ivan@mail.com"
};

db.Users.Add(user);
db.SaveChanges();

Console.WriteLine("Пользователь добавлен.");
}
}
Объяснение
new User

создаёт нового пользователя в памяти программы.

db.Users.Add(user);

говорит Entity Framework:

Этого пользователя нужно добавить в базу.
db.SaveChanges();

сохраняет изменения в файл базы данных.

Без SaveChanges() данные не сохранятся.


11. Вывод всех пользователей

Добавим код:

var users = db.Users.ToList();

foreach (var u in users)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
Объяснение
db.Users.ToList()

получает всех пользователей из базы.

foreach

перебирает пользователей по одному и выводит их в консоль.


12. Поиск пользователя

Например, нужно найти пользователей, у которых в имени есть Iv.

var foundUsers = db.Users
.Where(u => u.Name.Contains("Iv"))
.ToList();

foreach (var u in foundUsers)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
Объяснение
Where

означает “отфильтровать”.

u.Name.Contains("Iv")

означает:

в имени пользователя есть текст Iv

13. Сортировка пользователей

Например, вывести пользователей по возрасту:

var sortedUsers = db.Users
.OrderBy(u => u.Age)
.ToList();

foreach (var u in sortedUsers)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
Объяснение
OrderBy(u => u.Age)

сортирует пользователей по возрасту от меньшего к большему.

Для сортировки от большего к меньшему:

OrderByDescending(u => u.Age)

14. Изменение пользователя

Например, нужно изменить пользователя с Id = 1.

var user = db.Users.FirstOrDefault(u => u.Id == 1);

if (user != null)
{
user.Name = "Ivan Updated";
user.Age = 26;
user.Email = "new_ivan@mail.com";

db.SaveChanges();

Console.WriteLine("Пользователь обновлён.");
}
else
{
Console.WriteLine("Пользователь не найден.");
}
Объяснение
FirstOrDefault(u => u.Id == 1)

ищет первого пользователя с номером 1.

Если пользователь найден, мы меняем его свойства:

user.Name = "Ivan Updated";

А потом обязательно вызываем:

db.SaveChanges();

15. Удаление пользователя
var user = db.Users.FirstOrDefault(u => u.Id == 1);

if (user != null)
{
db.Users.Remove(user);
db.SaveChanges();

Console.WriteLine("Пользователь удалён.");
}
else
{
Console.WriteLine("Пользователь не найден.");
}
Объяснение
Remove(user)

помечает пользователя на удаление.

SaveChanges()

окончательно удаляет его из базы.


16. Полный пример программы
User.cs
public class User
{
public int Id { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public string Email { get; set; }
}
AppDbContext.cs
using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite("Data Source=lab.db");
}
}
Program.cs
using System;
using System.Linq;

class Program
{
static void Main()
{
using var db = new AppDbContext();

db.Database.EnsureCreated();

while (true)
{
Console.WriteLine();
Console.WriteLine("1 - Добавить пользователя");
Console.WriteLine("2 - Показать всех пользователей");
Console.WriteLine("3 - Найти пользователя по имени");
Console.WriteLine("4 - Обновить пользователя");
Console.WriteLine("5 - Удалить пользователя");
Console.WriteLine("6 - Показать пользователей по возрасту");
Console.WriteLine("0 - Выход");
Console.Write("Выберите действие: ");

string choice = Console.ReadLine();

if (choice == "1")
{
AddUser(db);
}
else if (choice == "2")
{
ShowUsers(db);
}
else if (choice == "3")
{
FindUser(db);
}
else if (choice == "4")
{
UpdateUser(db);
}
else if (choice == "5")
{
DeleteUser(db);
}
else if (choice == "6")
{
ShowUsersSortedByAge(db);
}
else if (choice == "0")
{
break;
}
else
{
Console.WriteLine("Неверный пункт меню.");
}
}
}

static void AddUser(AppDbContext db)
{
Console.Write("Введите имя: ");
string name = Console.ReadLine();

Console.Write("Введите возраст: ");
string ageText = Console.ReadLine();

if (!int.TryParse(ageText, out int age))
{
Console.WriteLine("Возраст должен быть числом.");
return;
}

Console.Write("Введите Email: ");
string email = Console.ReadLine();

var user = new User
{
Name = name,
Age = age,
Email = email
};

db.Users.Add(user);
db.SaveChanges();

Console.WriteLine("Пользователь добавлен.");
}

static void ShowUsers(AppDbContext db)
{
var users = db.Users.ToList();

if (users.Count == 0)
{
Console.WriteLine("Пользователей пока нет.");
return;
}

foreach (var u in users)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
}

static void FindUser(AppDbContext db)
{
Console.Write("Введите часть имени: ");
string name = Console.ReadLine();

var users = db.Users
.Where(u => u.Name.Contains(name))
.ToList();

if (users.Count == 0)
{
Console.WriteLine("Пользователи не найдены.");
return;
}

foreach (var u in users)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
}

static void UpdateUser(AppDbContext db)
{
Console.Write("Введите Id пользователя: ");
string idText = Console.ReadLine();

if (!int.TryParse(idText, out int id))
{
Console.WriteLine("Id должен быть числом.");
return;
}

var user = db.Users.FirstOrDefault(u => u.Id == id);

if (user == null)
{
Console.WriteLine("Пользователь не найден.");
return;
}

Console.Write("Введите новое имя: ");
user.Name = Console.ReadLine();

Console.Write("Введите новый возраст: ");
string ageText = Console.ReadLine();

if (!int.TryParse(ageText, out int age))
{
Console.WriteLine("Возраст должен быть числом.");
return;
}

user.Age = age;

Console.Write("Введите новый Email: ");
user.Email = Console.ReadLine();

db.SaveChanges();

Console.WriteLine("Пользователь обновлён.");
}

static void DeleteUser(AppDbContext db)
{
Console.Write("Введите Id пользователя: ");
string idText = Console.ReadLine();

if (!int.TryParse(idText, out int id))
{
Console.WriteLine("Id должен быть числом.");
return;
}

var user = db.Users.FirstOrDefault(u => u.Id == id);

if (user == null)
{
Console.WriteLine("Пользователь не найден.");
return;
}

db.Users.Remove(user);
db.SaveChanges();

Console.WriteLine("Пользователь удалён.");
}

static void ShowUsersSortedByAge(AppDbContext db)
{
var users = db.Users
.OrderBy(u => u.Age)
.ToList();

foreach (var u in users)
{
Console.WriteLine($"{u.Id} | {u.Name} | {u.Age} | {u.Email}");
}
}
}

Нужно понимать:
1. База данных нужна для хранения информации после закрытия программы.
2. SQLite хранит базу в одном файле.
3. Entity Framework позволяет работать с базой без SQL.
4. Класс User превращается в таблицу пользователей.
5. Объект User превращается в одну запись в таблице.
6. SaveChanges() обязательно сохраняет изменения.
7. Через Add, Remove, Where, OrderBy можно управлять данными.

18. Задания для самостоятельной работы
Базовый уровень
  1. Создать проект в Visual Studio.
  2. Установить Entity Framework Core.
  3. Создать класс User.
  4. Создать AppDbContext.
  5. Реализовать добавление пользователя.
  6. Реализовать вывод всех пользователей.
  7. Добавить поле Email.
  8. Реализовать поиск пользователя по имени.
  9. Реализовать сортировку пользователей по возрасту.
  10. Реализовать изменение данных пользователя.
  11. Реализовать удаление пользователя.
Частые ошибки
Ошибка 1. Данные не сохраняются

Причина:

db.SaveChanges();

не был вызван.


Ошибка 2. Не установлены пакеты

Если Visual Studio подчёркивает DbContext или UseSqlite, значит не установлены нужные NuGet-пакеты.


Ошибка 3. Возраст вводится текстом

Например, пользователь ввёл:

abc

Поэтому нужно использовать:

int.TryParse(...)

Ошибка 4. Пользователь не найден

FirstOrDefault может вернуть null.

Поэтому нужна проверка:

if (user == null)
Вы используете гостевой доступ (Вход)
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика
На платформе Moodle