Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
В реальной программе была бы предусмотрена логика обработки такой ошибки, но в рассматриваемом примере просто генерируется новое исключение. Добавьте в класс
InventoryDal
public void DeleteCar(int id)
{
OpenConnection();
// Получить идентификатор автомобиля, подлежащего удалению,
// и удалить запись о нем.
string sql = $"Delete from Inventory where Id = '{id}'";
using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
{
try
{
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
catch (SqlException ex)
{
Exception error = new Exception("Sorry! That car is on order!", ex);
throw error;
}
}
CloseConnection();
}
Добавление логики обновления
Когда речь идет об обновлении существующей записи в таблице
Inventory
string
В идеале лучше иметь набор методов, которые позволяют вызывающему коду обновлять запись разнообразными способами. Тем не менее, определите для такой простой библиотеки доступа к данным единственный метод, который дает вызывающему коду возможность обновить дружественное имя указанного автомобиля:
public void UpdateCarPetName(int id, string newPetName)
{
OpenConnection();
// Получить идентификатор автомобиля для модификации дружественного имени.
string sql = $"Update Inventory Set PetName = '{newPetName}'
Where Id = '{id}'";
using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
{
command.ExecuteNonQuery();
}
CloseConnection();
}
Работа с параметризированным и объектами команд
В настоящий момент внутри логики вставки, обновления и удаления для типа
InventoryDal
CommandText
Для поддержки параметризированных запросов объекты команд ADO.NET содержат коллекцию индивидуальных объектов параметров. По умолчанию коллекция пуста, но в нее можно вставить любое количество объектов параметров, которые отображаются на параметры-заполнители в запросе SQL. Чтобы ассоциировать параметр внутри запроса SQL с членом коллекции параметров в объекте команды, параметр запроса SQL необходимо снабдить префиксом в виде символа
@
Указание параметров с использованием типа DbParameter
Перед построением параметризированного запроса вы должны ознакомиться с типом
DbParameter
DbParameter
DbParameter

Давайте теперь посмотрим, как заполнять коллекцию совместимых с
DBParameter
InventoryDal
Обновление метода GetCar()
В исходной реализации метода
GetCar()
GetCar()
SqlParameter
SqlParameter param = new SqlParameter
{
ParameterName = "@carId",
Value = id,
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Input
}
Значение
ParameterName
ParameterDirection.Input
ParameterDirection.Output
InputOutput
ReturnValue