Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 578
Эндрю Троелсен
Объекты команд ADO.NET поддерживают коллекцию дискретных типов параметра. По умолчанию эта коллекция пуста, но вы можете добавить в нее любое число объектов параметра, которые должны будут отображаться в "заместитель" параметра в SQL-запросе. Чтобы ассоциировать параметр в SQL-запросе с членом коллекции параметров данного объекта команды, добавьте к текстовому SQL-параметру префикс @ (это работает, как минимум, при использовании Microsoft SQL Server, но такое обозначение поддерживают не все СУБД).
Указание параметров с помощью типа DbParameter
Перед тем как приступить к построению параметризованных запросов, мы должны рассмотреть тип 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)");
// Наполнение коллекции параметров.
SqlCommand cmd = new SqlCommand(sql, cn);
SqlParameter param = new SqlParameter();
param.ParameterName = "@CarID";
param.Value = newCarID;
param.SqlDbType = SqlDbType.Int;
cmd.Parameters.Add(param);
param = new SqlParameter();
param.ParameterName = "@Make";
param.Value = newCarMake;
param.SqlDbType = SqlDbType.Char;