Читаем Язык программирования С# 2005 и платформа .NET 2.0. полностью

 // Получение номера машины для модификации и ввод нового названия.

 Console.Write("Введите номер машины для модификации: ");

 string newPetName = "";

 int carToUpdate = carToUpdate = int.Parse(Console.ReadLine());

 Console.Write("Введите новое название: ");

 newPetName = Console.ReadLine();

 // Обновление записи.

 string sql = string.Format("Update Inventory Set PetName='{0}' Where CarID='{1}'", newPetName, carToUpdate);

 SqlCommand cmd = new SqlCommand(sql, cn);

 cmd.ExecuteNonQuery();

}

На этом создание приложения завершается. На рис. 22.8 показан результат тестового запуска этого приложения.

Рис. 22.8. Вставка, обновление и удаление записей c помощью объектов команд

<p>Работа с объектами параметризованных команд</p>

Показанная выше программная логика вставки, обновления и удаления работает так, как и ожидается, однако обратите внимание на то, что каждый из SQL-запросов здесь представлен "жестко" закодированными строковыми литералами. Вы, возможно, знаете, что с SQL-параметрами можно обращаться, как с объектами, а не с простыми строками текста, если использовать параметризованные запросы Обычно параметризованные запросы выполняются намного быстрее буквальных SQL-строк, поскольку они анализируются только один раз (а не каждый раз, когда SQL-строка присваивается свойству CommandText). Параметризованные запросы также обеспечивают защиту от атак SQL-инъекции (это известная проблема безопасности доступа к данным).

Объекты команд ADO.NET поддерживают коллекцию дискретных типов параметра. По умолчанию эта коллекция пуста, но вы можете добавить в нее любое число объектов параметра, которые должны будут отображаться в "заместитель" параметра в SQL-запросе. Чтобы ассоциировать параметр в SQL-запросе с членом коллекции параметров данного объекта команды, добавьте к текстовому SQL-параметру префикс @ (это работает, как минимум, при использовании Microsoft SQL Server, но такое обозначение поддерживают не все СУБД).

<p>Указание параметров с помощью типа DbParameter</p>

Перед тем как приступить к построению параметризованных запросов, мы должны рассмотреть тип DbParameter (который является базовым классом объектов параметров, специфичных для конкретного поставщика данных). Этот класс поддерживает ряд свойств, позволяющих указать имя, размер и тип данных параметра, а также другие его особенности, например направление параметра. В табл. 22.8 описаны некоторые свойства типа DbParameter.

Таблица 22.8. Ключевые члены типа DbParameter 

Свойство Описание
DbType Читает или записывает информацию о "родном" типе данных для источника данных, представленную в виде соответствующего типа данных CLR
Direction Читает или записывает значение, указывающее направление потока для данного параметра (только ввод, только вывод, двунаправленное движение, предусмотренное возвращение значения)
IsNullable Читает или записывает значение, являющееся индикатором того, что параметр допускает значения null
ParameterName Читает или устанавливает имя DbParameter
Size Читает или устанавливает максимальный размер данных параметра
Value Читает или устанавливает значение параметра

Для иллюстрации мы модифицируем предыдущий метод InsertNewCar(), чтобы в нем использовались объекты параметра. Вот как может выглядеть соответствующий программный код.

private static void InsertNewCar(SqlConnection cn) {

 …

 // Обратите внимание на 'заполнители' в SQL-запросе.

 string sql = string.Format("Insert Into Inventory" +

  "(CarID, Make, Color, PetName) Values" +

  "(@CarID, @Make, @Color, @PetName)");

 // Наполнение коллекции параметров.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT