На заметку!
Помещение пользовательского ввода внутрь низкоуровневых операторов SQL, как делалось здесь, обычно считается неудачной практикой. Позже в главе код будет модифицирован для использования параметров.Вставка новой записи об автомобиле
Вставка новой записи в таблицу Inventory сводится к построению SQL-оператора Insert
ExecuteNonQuery с применением объекта команды и закрытию подключения. Увидеть вставку в действии можно, добавив к типу InventoryDal открытый метод по имени InsertAuto, который принимает три параметра, отображаемые на не связанные с идентичностью столбцы таблицы Inventory (Color, Make и PetName). Указанные аргументы используются при форматировании строки для вставки новой записи. И, наконец, для выполнения итогового оператора SQL применяется объект SqlConnection.public void InsertAuto(string color, int makeId, string petName)
{
OpenConnection;
// Сформатировать и выполнить оператор SQL.
string sql = $"Insert Into Inventory (MakeId, Color, PetName) Values ('{makeId}',
'{color}', '{petName}')";
// Выполнить, используя наше подключение.
using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
{
command.CommandType = CommandType.Text;
command.ExecuteNonQuery;
}
CloseConnection;
}
Приведенный выше метод принимает три значения для Car
Car, чтобы стать строго типизированным, гарантируя тем самым, что все свойства передаются методу в корректном порядке.Создание строго типизированного метода InsertCar
Добавьте в класс InventoryDal
InsertAuto, которая принимает в качестве параметра Car:public void InsertAuto(Car car)
{
OpenConnection;
// Сформатировать и выполнить оператор SQL.
string sql = "Insert Into Inventory (MakeId, Color, PetName) Values " +
$"('{car.MakeId}', '{car.Color}', '{car.PetName}')";
// Выполнить, используя наше подключение.
using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
{
command.CommandType = CommandType.Text;
command.ExecuteNonQuery;
}
CloseConnection;
}
Добавление логики удаления
Удаление существующей записи не сложнее вставки новой записи. В отличие от метода InsertAuto
try/catch, который обрабатывает возможную попытку удалить запись об автомобиле, уже заказанном кем-то из таблицы Customers. Стандартные параметры INSERT и UPDATE для внешних ключей по умолчанию предотвращают удаление зависимых записей в связанных таблицах. Когда предпринимается попытка подобного удаления, генерируется исключение SqlException.В реальной программе была бы предусмотрена логика обработки такой ошибки, но в рассматриваемом примере просто генерируется новое исключение. Добавьте в класс 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;
}
Добавление логики обновления
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT