Введение: зачем C# разработчику базы данных?
Любое современное приложение — от простого блога до корпоративной ERP-системы — хранит данные. Без базы данных (БД) невозможно обеспечить постоянное хранение, быстрый поиск и целостность информации. Для C# разработчика умение работать с базами данных — это не просто плюс, а обязательный навык. В этой статье мы разберем две популярные СУБД: реляционную PostgreSQL и документо-ориентированную MongoDB. Вы узнаете, как подключиться к ним из .NET-приложения и выполнять базовые операции (CRUD). Статья ориентирована на начинающих, поэтому мы будем двигаться от установки до первого рабочего кода.
1. Подготовка окружения и установка драйверов
Прежде чем писать код, необходимо установить сами базы данных и добавить в проект C# соответствующие NuGet-пакеты.
1.1. Установка PostgreSQL и MongoDB
- PostgreSQL: Скачайте последнюю версию с официального сайта postgresql.org. При установке запомните порт (по умолчанию 5432) и пароль для суперпользователя
postgres. - MongoDB: Скачайте Community Edition с mongodb.com. Установите как сервис. Для удобства можно также установить MongoDB Compass — графический интерфейс для просмотра данных.
После установки убедитесь, что сервисы запущены. Для проверки используйте командную строку (для PostgreSQL: psql -U postgres, для MongoDB: mongosh).
1.2. Создание проекта и установка пакетов
Создайте консольное приложение .NET 8:
dotnet new console -n DatabaseDemo
cd DatabaseDemo
Теперь установите необходимые драйверы:
// Для PostgreSQL
dotnet add package Npgsql
// Для MongoDB
dotnet add package MongoDB.Driver
Npgsql — это полноценный .NET-провайдер для PostgreSQL. MongoDB.Driver — официальный драйвер от MongoDB, Inc.
2. Работа с PostgreSQL в C#
PostgreSQL — это объектно-реляционная СУБД. Данные хранятся в таблицах, связанных между собой через внешние ключи. Для работы мы будем использовать сырые SQL-запросы через Npgsql, чтобы вы поняли механику подключения и выполнения команд.
2.1. Подключение к серверу и создание таблицы
Сначала создадим базу данных (например, shopdb) через psql или через код. В коде мы будем подключаться к уже существующей БД. Напишем метод для создания таблицы Products:
using Npgsql;
string connectionString = "Host=localhost;Port=5432;Database=shopdb;Username=postgres;Password=your_password";
using var connection = new NpgsqlConnection(connectionString);
connection.Open();
string createTable = @"
CREATE TABLE IF NOT EXISTS Products (
Id SERIAL PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Price DECIMAL(10,2) NOT NULL,
Quantity INT DEFAULT 0
);";
using var command = new NpgsqlCommand(createTable, connection);
command.ExecuteNonQuery();
Console.WriteLine("Таблица создана.");
Обратите внимание: мы используем using для автоматического закрытия соединения. Тип SERIAL автоматически создает автоинкрементное поле.
2.2. CRUD-операции (Insert, Select, Update, Delete)
Добавим несколько товаров и выведем их на экран:
// Вставка данных
string insert = "INSERT INTO Products (Name, Price, Quantity) VALUES (@n, @p, @q)";
using var cmdInsert = new NpgsqlCommand(insert, connection);
cmdInsert.Parameters.AddWithValue("@n", "Ноутбук");
cmdInsert.Parameters.AddWithValue("@p", 79999.99m);
cmdInsert.Parameters.AddWithValue("@q", 10);
cmdInsert.ExecuteNonQuery();
// Выборка данных
string select = "SELECT * FROM Products";
using var cmdSelect = new NpgsqlCommand(select, connection);
using var reader = cmdSelect.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"{reader["Id"]}: {reader["Name"]} - {reader["Price"]} руб. (остаток: {reader["Quantity"]})");
}
Для обновления и удаления используйте аналогичные запросы с UPDATE и DELETE, передавая параметры через Parameters.AddWithValue. Важно: всегда используйте параметризованные запросы для защиты от SQL-инъекций.
3. Работа с MongoDB в C#
MongoDB — это NoSQL база данных, где данные хранятся в виде JSON-подобных документов (BSON). Здесь нет таблиц и схем — вы работаете с коллекциями и документами.
3.1. Подключение и получение коллекции
По умолчанию MongoDB слушает порт 27017. Подключимся к базе shopdb и получим коллекцию products:
using MongoDB.Driver;
using MongoDB.Bson;
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("shopdb");
var collection = database.GetCollection<BsonDocument>("products");
Мы используем BsonDocument — универсальный тип для работы с документами. Можно также создать класс Product и использовать его (тогда коллекция будет типизированной: GetCollection<Product>).
3.2. CRUD-операции в MongoDB
Добавим документ и выполним поиск:
// Создание документа
var document = new BsonDocument
{
{ "name", "Смартфон" },
{ "price", 49999.99 },
{ "quantity", 25 }
};
collection.InsertOne(document);
Console.WriteLine("Документ добавлен.");
// Чтение всех документов
var filter = Builders<BsonDocument>.Filter.Empty;
var documents = collection.Find(filter).ToList();
foreach (var doc in documents)
{
Console.WriteLine(doc.ToString());
}
Для обновления используйте UpdateOne или UpdateMany, для удаления — DeleteOne:
// Обновление: увеличить цену на