Есть ли у вас опыт написания SQL-запросов в коде без использования ORM?

«Есть ли у вас опыт написания SQL-запросов в коде без использования ORM?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, есть. При работе с .NET использовал ADO.NET для прямого выполнения SQL-запросов. Это включает создание подключений (SqlConnection), команд (SqlCommand) и чтение результатов через SqlDataReader.

Пример выполнения параметризованного запроса:

using (var connection = new SqlConnection(connectionString))
{
    await connection.OpenAsync();
    var command = new SqlCommand("SELECT Id, Name, Email FROM Users WHERE IsActive = @IsActive", connection);
    command.Parameters.AddWithValue("@IsActive", true);

    using (var reader = await command.ExecuteReaderAsync())
    {
        while (await reader.ReadAsync())
        {
            var userId = reader.GetInt32(0);
            var userName = reader.GetString(1);
            // Обработка данных
        }
    }
}

Ключевые практики:

  • Параметризация: Всегда использую параметры (@param) для предотвращения SQL-инъекций.
  • Управление ресурсами: Обязательно оборачиваю объекты, реализующие IDisposable, в блоки using.
  • Асинхронность: Предпочитаю асинхронные методы (ExecuteReaderAsync, OpenAsync) для масштабируемости.
  • Транзакции: Для атомарных операций применяю SqlTransaction.

Такой подход дает полный контроль над запросом и может быть критически важен для оптимизации сложных операций или работы с легаси-системами.