Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
В реальной программе была бы предусмотрена логика обработки такой ошибки, но в рассматриваемом примере просто генерируется новое исключение. Добавьте в класс
InventoryDalpublic 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();}Добавление логики обновления
Когда речь идет об обновлении существующей записи в таблице
InventorystringВ идеале лучше иметь набор методов, которые позволяют вызывающему коду обновлять запись разнообразными способами. Тем не менее, определите для такой простой библиотеки доступа к данным единственный метод, который дает вызывающему коду возможность обновить дружественное имя указанного автомобиля:
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();}Работа с параметризированным и объектами команд
В настоящий момент внутри логики вставки, обновления и удаления для типа
InventoryDalCommandTextДля поддержки параметризированных запросов объекты команд ADO.NET содержат коллекцию индивидуальных объектов параметров. По умолчанию коллекция пуста, но в нее можно вставить любое количество объектов параметров, которые отображаются на параметры-заполнители в запросе SQL. Чтобы ассоциировать параметр внутри запроса SQL с членом коллекции параметров в объекте команды, параметр запроса SQL необходимо снабдить префиксом в виде символа
@Указание параметров с использованием типа DbParameter
Перед построением параметризированного запроса вы должны ознакомиться с типом
DbParameterDbParameterDbParameter
Давайте теперь посмотрим, как заполнять коллекцию совместимых с
DBParameterInventoryDalОбновление метода GetCar()
В исходной реализации метода
GetCar()GetCar()SqlParameterSqlParameter param = new SqlParameter{ ParameterName = "@carId", Value = id, SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input}Значение
ParameterNameParameterDirection.InputParameterDirection.OutputInputOutputReturnValue