Ответ
Да, есть. При работе с .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.
Такой подход дает полный контроль над запросом и может быть критически важен для оптимизации сложных операций или работы с легаси-системами.