Шрифт:
Интервал:
Закладка:
Модифицируйте строку SQL для использования имени параметра ("@carid") вместо интерполированной строки C# ("{id}"):
string sql =
@"SELECT i.Id, i.Color, i.PetName,m.Name as Make
FROM Inventory i
INNER JOIN Makes m on m.Id = i.MakeId
WHERE i.Id = @CarId";
Последнее обновление связано с добавлением нового объекта параметра в коллекцию Parameters объекта команды:
command.Parameters.Add(param);
Обновление метода DeleteCar()
Аналогично в исходной реализации метода DeleteCar() применяется интерполяция строк С#. Чтобы модифицировать этот метод, создайте экземпляр SqlParameter с надлежащими значениями:
SqlParameter param = new SqlParameter
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})ParameterName = "@carId",
Value = id,
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Input
};
Обновите строку SQL для использования имени параметра ("@ carId"):
string sql = "Delete from Inventory where Id = @carId";
В заключение добавьте новый объект параметра в коллекцию Parameters объекта команды:
command.Parameters.Add(param);
Обновление метода UpdateCarPetName()
Метод UpdateCarPetName() требует предоставления двух параметров: одного для Id автомобиля и еще одного для нового значения PetName. Первый параметр создается в точности как в предыдущих двух примерах (за исключением отличающегося имени переменной), а второй параметр обеспечивает отображение на тип NVarChar базы данных (тип поля PetName из таблицы Inventory). Обратите внимание на установку значения Size. Важно, чтобы этот размер совпадал с размером поля базы данных, что обеспечит отсутствие проблем при выполнении команды:
SqlParameter paramId = new SqlParameter
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})ParameterName = "@carId",
Value = id,
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Input
};
SqlParameter paramName = new SqlParameter
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})ParameterName = "@petName",
Value = newPetName,
SqlDbType = SqlDbType.NVarChar,
Size = 50,
Direction = ParameterDirection.Input
};
Модифицируйте строку SQL для применения параметров:
string sql = $"Update Inventory Set PetName = @petName Where Id = @carId";
Последнее обновление касается добавления новых параметров в коллекцию Parameters объекта команды:
command.Parameters.Add(paramId);
command.Parameters.Add(paramName);
Обновление метода InsertAuto()
Добавьте следующую версию метода InsertAuto(), чтобы задействовать объекты параметров:
public void InsertAuto(Car car)
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})OpenConnection();
// Обратите внимание на "заполнители" в запросе SQL.
string sql = "Insert Into Inventory" +
"(MakeId, Color, PetName) Values" +
"(@MakeId, @Color, @PetName)";
// Эта команда будет иметь внутренние параметры.
using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
{
// Заполнить коллекцию параметров.
SqlParameter parameter = new SqlParameter
{
ParameterName = "@MakeId",
Value = car.MakeId,
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Input
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Color",
Value = car.Color,
SqlDbType = SqlDbType. NVarChar,
Size = 50,
Direction = ParameterDirection.Input
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@PetName",
- Понимание SQL - Мартин Грубер - Базы данных