* При перепечатке материалов ссылка на 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

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

Установка приложения
Системные кисти, перья и цвета
Достоинства сертификации Microsoft
Извлечение и обновление данных с помощью объектов DataAdapter и DataSet
Automatically Starting your Application on Windows Mobile
Применение методов формы
Применение XML с объектами DataSet
Добавление формы к проекту
Лямбда-выражения
Удаление и отключение точек прерывания
Обзор ADO.NET
Графический дизайнер
Установка сборок в GAC
Наследование от абстрактного класса
Редактор файловой системы
| .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


     



Rambler's Top100

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

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