* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Команды для манипулирования данными
8 февраля 2009

Объект Command содержит ссылку на хранимую процедуру БД или оператор SQL и
способен исполнить этот оператор на источнике данных, используя активное со-
единение. Объект Command также содержит все данные, необходимые для исполне-
ния команды: ссылку на активное соединение, текст команды и ее параметры.
Подобно другим классам компонентов провайдера данных, класс Command пред-
ставлен двумя вариантами. Первый, OleDbCommand, разработан для взаимодействия
с самыми разными типами БД, a SqlCommand — только для БД SQL Server 7.0 и
выше.
Для класса Command достаточно активного соединения, взаимодействие с объек-
том DalaAdapter ему не требуется. В силу этих причин объекты Command очень бы-
стро и эффективно взаимодействуют с различными БД, позволяя:
• исполнять команды, не возвращающие значения, например INSERT, UPDATE
и DELETE;
• исполнять команды, возвращающие единственное значение;
• исполнять команды языка Database Definition Language (DDL), например CREATE
TABLE и ALTER;
• работать с объектом DataAdapter, возвращающим объект DalaSet;
• возвращать результирующий набор непосредственно через экземпляр объекта
DataReader — это самый быстрый способ доступа к данным, он особенно удо-
бен, если данные требуются только для чтения;
• возвращать результирующий набор в виде потока XML — эту возможность под-
держивает только класс SqlCommand;
• возвращать результирующий набор, созданный на основе нескольких таблиц или
в результате исполнения нескольких операторов.
Создание и настройка команд
Есть три способа создания команды для манипулирования данными:
• перетаскивание хранимой процедуры из окна Server Explorer в окно дизайнера;
• перетаскивание объекта SqlCommand (или OleDbCommand) с вкладки Data пане-
ли Toolbox в окно дизайнера с последующей его настройкой;
• объявление и создание экземпляра объекта Command соответствующего типа в
коде с последующей его настройкой вручную.
Первый способ — самый простой. Он позволяет автоматически создавать объект
Command на основе любой хранимой процедуры БД. В результате перетаскивания
хранимой процедуры в окно дизайнера создается объект Command соответствующе-
го типа. Новый объект команды ссылается на хранимую процедуру, позволяя вы-
зывать ее в любое время без дополнительной настройки.
Чтобы создать объект Command, ссылающийся на имеющуюся хранимую проце-
дуру, перетащите хранимую процедуру из окна Server Explorer в окно дизайнера — в
результате будет создан и сконфигурирован экземпляр объекта Command.
Создание объекта Command нужного типа при помощи интерфейса дизайнера
не многим сложнее: перетащите SqlCommand или OleDbCommand с вкладки Data
панели Toolbox в окно конструктора. Создав объект Command, сконфигурируйте его,
установив свойства Connection, CommandType и CommandText.
Свойство CommandType определяет тип команды, содержащийся в свойстве
CommandText, оно может принимать одно из следующих значений:
• Text — заставляет рассматривать значение свойства CommandText как текст ко-
манды SQL, при этом в свойстве CommandText должен быть один или несколько
допустимых операторов SQL, разделенных точкой с запятой. В последнем слу-
чае операторы SQL выполняются по порядку;
• StoredProcedure — в этом случае в свойстве CommandText необходимо указать имя
существующей хранимой процедуры — она будет исполнена при вызове данной
команды;
• TableDirect — в этом случае в свойстве CommandText должно быть имя одной или
нескольких таблиц. При исполнении эта команда вернет все столбцы и строки
таблиц, заданных свойством CommandText.
Свойство Connection следует устанавливать в соответствии с типом активного со-
единения: для объекта SqlCommandтребуется соединение на основе объекта SqlConnectt'on,
а для OleDbCommand — соединение на основе OleDbConnection.
Исполнение команд
Оба типа объектов Command поддерживают три метода, позволяющих исполнить
команду, которую он представляет:
• Execute Non Query
• ExecuteScalar
• ExecuteReader
Класс SqlCommand дополнительно поддерживает метод ExecuteXml Reader,
Все эти методы исполняют на источнике данных команду, представленную
объектом Command, отличаются они возвращаемым значением. Метод Execute-
NonQuery — самый простой из них, он не возвращает никаких значений. Этот ме-
тод обычно применяют для вызова команд SQL и хранимых процедур, таких, как
INSERT, UPDATE или DELETE. Кроме того, вызов этого метода — единственный
способ исполнения в ADO.NET команд DDL, например CREATE или ALTER.
Метод ExecuteScalar возвращает только значение первого поля первой строки, из-
влеченной заданной командой, независимо от того, сколько строк выбрано этой
командой в действительности. ExecuteReader возвращает неизменяемый объект
DataReader, допускающий только последовательный однонаправленный просмотр
без использования объекта DataAdapter. Если не требуется модифицировать содер-
жимое БД или как-то иначе манипулировать им, этот способ извлечения данных
является самым быстрым и эффективным. Класс SqlCommand поддерживает допол-
нительный метод — ExecuteXml Reader, возвращающий результирующий набор в
формате XML; результаты возвращаются в виде неизменяемого объекта XmlReader,
доступного только для последовательно однонаправленного просмотра.
Параметры
Команды для манипулирования данными часто вызываются с параметрами, при
этом некоторые элементы команды становятся известными только в период выпол-
нения, Давайте рассмотрим приложение для учета товаров в книжном магазине. В
нем следует предусмотреть функцию поиска книг по названию, которую можно
реализовать посредством запроса к БД на основе подобного оператора 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
• SourceCoiumn
• 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.
Visual Basic .NET
1 Эта команда устанавливает значение параметра, ссылаясь на него по индексу.
QleDbCommandl.Parameters(O).Value = "Hello World"
1 Эта строка устанавливает значение параметра, ссылаясь на него по имени.
QleDbCommand1.Parameters("myParafneter").Value = "Goodbye for now"
Visual C#
// Эта команда устанавливает значение параметра, ссылаясь на него по индексу.
DleDbCommand1.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. В случае
объекта OleDbCommand поле подстановки обозначается символом «?», например:
SELECT Empld, Title, FirstName, LastName
FROM Employees
WHERE (Title = ?)
Здесь знаком вопроса указано место подстановки параметра. Допускается также
указывать несколько параметров следующим образом:
SELECT Empld, Title, FirstName, LastName
FROM Employees
WHERE (FirstName - ?) AND (LastName = ?)
Если в тексте команды имеется несколько полей для подстановки параметров,
порядок их заполнения определяется порядком элементов набора Parameters.
С объектом SqlCommand применяют именованные параметры. Чтобы создать
поле подстановки для именованного параметра, необходимо указать имя параметра
(так. как оно задано свойством ParameterName), предварив его символом «@». На-
пример, в следующем операторе SQL объявлено поле для подстановки именован-
ного параметра Title:
SELECT Empld. Title, FirstName, LastName
FROM Employees
WHERE (Title = PTitle)
Ниже описаны способы исполнения команд различных типов при помощи
объектов Command.
Ь Как при помощи объекта Command исполнить команду, не возвращающую значений
Так исполняют команды INSERT, UPDATE и DELETE, а также команды DDL,
такие, как CREATE TABLE и ALTER.
1. Для исполнения хранимой процедуры установите свойство CommandType в
Stored Procedure, а для исполнения оператора SQL — в Text.
2. Запишите в свойство CommandText имя хранимой процедуры или строку опера-
тора SQL соответственно.
3. Объявите все необходимые параметры и присвойте им соответствующие зна-
чения.
4. Вызовите метод Command.ExecuteNonQuery, например, так:
Visual Basic .NET
Эту команду одинаково вызывают при использовании
как класса OleDbComrnand, так и SqlConirnand.
myCommand.ExecuteNonQuery()
Visual C#
// Эту команду одинаково вызывают при использовании
// как класса OleDbCornmand, так и SqlCommand,
myComrriand. ExecuteNonQuery();
> Как при помощи объекта Command исполнить команду, возвращающую един
ственное значение
1. Для исполнения хранимой процедуры установите свойство Command!уре в
StoredProcedure, а для исполнения оператора SQL — в Text.
2. Запишите в свойство CommandTextимя хранимой процедуры или строку опера-
тора SQL соответственно.
3. Объявите все необходимые параметры и присвойте им соответствующие значения.
4. Вызовите метод Command.ExecuteScalar, например, так:
Visual Basic .NET
Эту команду одинаково вызывают при использовании
1 как класса OleDbCommand, так и SqlCommand.
Dim 0 As Object
О = myCommand.ExecuteScalar()
Visual C#
// Эту команду одинаково вызывают при использовании
// как класса OleDbCommand, так и SqlCornmand.
Object 0;
О = myCommand. ExecuteNonScalarO;

Теги: .NET

Статьи по теме:

Абстрактные классы и члены
Установка сборок в виде компилированных образов
Вложенные элементы управления и контейнеры
Создание перегруженных методов
Ссылки на внешние библиотеки
Создание экземпляров элементов управления ActiveX
Интерфейсы как средство достижения полиморфизма
Создание элемента управления
Свойства, доступные только для чтения или только для записи
Достоинства сертификации Microsoft
Системные кисти, перья и цвета
Managed Control Panel Items
Общие (статические) члены
Создание поддержки печати
Всё новое - это хорошо забытое старое
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Команды для манипулирования данными. Регион сайта: Москва и Санкт-Петербург