ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Удаление записей
Удалить существующую запись так же просто, как и вставить новую. Но, в отличие от программного кода для InsertNewCar, ниже демонстрируется важная возможность применения try/catch для обработки попытки удаления автомобиля, используемого в настоящий момент в процессе оформления заказа для покупателя из таблицы Customers (сама эта таблица будет рассмотрена в этой главе позже).
Обновление записей
Если вы разобрались с программным кодом для DeleteCar и InsertNewCar, то и программный код для UpdateCarPetName не будет для вас сложным (здесь для простоты логика try/catch тоже исключена).
На этом создание приложения завершается. На рис. 22.8 показан результат тестового запуска этого приложения.
Рис. 22.8. Вставка, обновление и удаление записей c помощью объектов команд
Работа с объектами параметризованных команд
Показанная выше программная логика вставки, обновления и удаления работает так, как и ожидается, однако обратите внимание на то, что каждый из SQL-запросов здесь представлен "жестко" закодированными строковыми литералами. Вы, возможно, знаете, что с SQL-параметрами можно обращаться, как с объектами, а не с простыми строками текста, если использовать параметризованные запросы Обычно параметризованные запросы выполняются намного быстрее буквальных SQL-строк, поскольку они анализируются только один раз (а не каждый раз, когда SQL-строка присваивается свойству CommandText). Параметризованные запросы также обеспечивают защиту от атак SQL-инъекции (это известная проблема безопасности доступа к данным).
Объекты команд ADO.NET поддерживают коллекцию дискретных типов параметра. По умолчанию эта коллекция пуста,
Указание параметров с помощью типа DbParameter
Перед тем как приступить к построению параметризованных запросов, мы должны рассмотреть тип DbParameter (который является базовым классом объектов параметров, специфичных для конкретного поставщика данных). Этот класс поддерживает ряд свойств, позволяющих указать имя, размер и тип данных параметра, а также другие его особенности, например направление параметра. В табл. 22.8 описаны некоторые свойства типа DbParameter.
Таблица 22.8. Ключевые члены типа DbParameter
Свойство | Описание |
---|---|
DbType | Читает или записывает информацию о "родном" типе данных для источника данных, представленную в виде соответствующего типа данных CLR |
Direction | Читает или записывает значение, указывающее направление потока для данного параметра (только ввод, только вывод, двунаправленное движение, предусмотренное возвращение значения) |
IsNullable | Читает или записывает значение, являющееся индикатором того, что параметр допускает значения null |
ParameterName | Читает или устанавливает имя DbParameter |
Size | Читает или устанавливает максимальный размер данных параметра |
Value | Читает или устанавливает значение параметра |
Для иллюстрации мы модифицируем предыдущий метод InsertNewCar, чтобы в нем использовались объекты параметра. Вот как может выглядеть соответствующий программный код.