Параметры

Команды для манипулирования данными часто вызываются с параметрами, при этом некоторые элементы команды становятся известными только в период выполнения, Давайте рассмотрим приложение для учета товаров в книжном магазине. В нем следует предусмотреть функцию поиска книг по названию, которую можно реализовать посредством запроса к БД на основе подобного оператора SQL:

SELECT * FROM Books WHERE (Title LIKE [value])

Уже в период разработки ясно, что потребуется возможность поиска книг по названию, заданному пользователем в период выполнения. Поскольку значение, ко торое введет пользователь, заранее неизвестно, необходим некоторый механизм для передачи введенного значения оператору SQL во время выполнения.

Параметры — это значения, которыми заполняют поля подстановки, введенные в текст команды во время разработки. Каждый параметр представлен экземпляром класса OleDbParameter или SqlParameter, в зависимости от типа провайдера. Параметры хранятся в свойстве Parameters объекта Command. В период выполнения значения параметров считываются из этого свойства и подставляются в оператор SQL либо передаются хранимой процедуре.

Объекты Command поддерживают набор Parameters, в котором хранятся объекты Parameter соответствующего типа. Ниже перечислены некоторые свойства объектов

Parameter.

• DbType (не отображается в окне дизайнера)

Direction

OleDb Type (только для объекта OleDb Parameters)

• ParameterName

Precision

• Scale

• Size

SourceColumn

• Source Version

• SQL Type (только для SQLParameters)

•Value

Свойства DbTypew OleDb Type объекта OleDb Parameters взаимосвязаны. Первое представляет тип параметра так, как тот представлен в обшей системе типов (CTS), а второе — как он представлен в БД; это необходимо, поскольку не все БД совместимы с CTS. Объект Parameter выполняет преобразование параметров из типа, используемого в приложении, в тип, используемый в БД. Поскольку эти свойства взаимосвязаны, при изменении значения одного из них значение другого автоматически изменяется и преобразуется в соответствующий поддерживаемый тип. Аналогичным образом связаны свойства DbType и SqlType объектов SqlParameter, свойство SqlType указывает тип БД SQL, представленный этим параметром. Свойство Direction объекта параметра определяет, является ли этот параметр входным или выходным. Возможные значения для этого свойства — Input, Output, InputOutput или ReturnVaSue — указывают, должен ли параметр хранить значение, возвращаемое хранимой процедурой или функцией.

На члены набора Parameters ссылаются в коде по индексу либо по имени, заданному свойством ParameterName. Ниже показаны два способа установки значения первого по счету параметра с именем myParameter.

// Эта команда устанавливает значение параметра, ссылаясь на него по индексу.

OleDbCommand1.Parameters[0].Value = "Hello World";

// Эта строка устанавливает значение параметра, ссылаясь на него по имени,

OleObCommand1.Parameters["myParameter"].Value = "Goodbye for now";

Свойства Precision, Scale и Size определяют длину и точность значения параметров. Precision и Scale применяются с числовыми и десятичными параметрами и определяют разрядность и длину дробной части значения свойства Value соответственно, a Size применяется с двоичными и строковыми параметрами и представляет максимальную длину такого поля.

Свойства Source Column и SourceVersion используются с параметрами, привязанными к полям объекта DataTable. SourceColumn указывает поле для поиска или сопоставления значений, a SourceVersion — версию поля для редактирования.

Свойство Value содержит значение параметра.

Если свойство CommandType объекта Command установлено в Text, необходимо предусмотреть поля подстановки для всех параметров оператора SQL.

С объектом SqlCommand применяют именованные параметры. Чтобы создать поле подстановки для именованного параметра, необходимо указать имя параметра (так. как оно задано свойством ParameterName), предварив его символом @. Например, в следующем операторе SQL объявлено поле для подстановки именованного параметра Title:

SELECT Empld. Title, FirstName, LastName

FROM Employees

WHERE (Title = @Title)