Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС / Подключенный режим / 0-Технология доступа к данным ADO.NET.docx
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
497.95 Кб
Скачать

Объект Command

Объект Command содержит ссылку на хранимую процедуру или оператор SQL, и способен исполнить этот оператор на источнике данных, используя активное подключение. Объект Command содержит данные, необходимые для исполне­ния команды: ссылку на активное подключение, текст команды и ее параметры.

Подобно другим классам компонентов провайдера данных, класс Command представлен двумя вариантами: OleDbCommand – для взаимодействия с разными типами БД; SqlCommand – только для баз данных SQL Server.

Для класса Command достаточно активного подключения, взаимодействие с объектом DataAdapter ему не требуется. Поэтому объекты Command быстро и эффективно взаимодействуют с базами данных. Объект Command позволяет:

  • исполнять команды, не возвращающие значения (например, insert, update, DELETE);

  • исполнять команды, возвращающие единственное значение;

  • исполнять команды языка Database Definition Language (например, create table и ALTER);

  • работать с объектом DataAdapter, возвращающим объект DataSet;

  • возвращать результирующий набор непосредственно через экземпляр объекта DataReader (самый быстрый способ доступа к данным, особенно удобен, если данные требуются только для чтения);

  • возвращать результирующий набор в виде потока XML (эту возможность поддерживает только класс SqlCommand);

  • возвращать результирующий набор, созданный на основе нескольких таблиц или в результате исполнения нескольких операторов.

У объекта Command есть свойство CommandType, определяющее тип команды, содержащейся в свойстве CommandText, оно может принимать одно из следующих значений:

  • Text – значение свойства CommandText рассматривается как текст команды SQL; в свойстве CommandText должен быть один или несколько операторов SQL, разделенных точкой с запятой; в последнем случае операторы SQL выполняются по порядку (в версии Express не работает);

  • StoredProcedure – в свойстве CommandText указывается имя хранимой процедуры, которая будет исполнена при вызове команды;

  • TableDirect – в свойстве CommandText должно быть имя одной или нескольких таблиц. При исполнении команда вернет все столбцы и строки таблиц, заданных свойством CommandText (не для SQL Server, только для Access).

Например, для выборки данных из таблицы Users надо написать код:

SqlCommand cmd = new SqlCommand();

cmd.Connection = con;

cmd.CommandType = CommandType.Text;

cmd.CommandText = “SELECT * FROM Users”;

Свойство Connection устанавливается в соответствии с типом соединения: для объекта SqlCommand требуется соединение на основе объекта SqlConnection, а для OleDbCommand – соединение на основе OleDbConnection.

Объект Command поддерживает три метода:

  • ExecuteNonQuery() – исполняет команды, не возвращающие данные, например INSERT, UPDATE и DELETE;

  • ExecuteScalar() – исполняет запросы к БД, возвращающие единственное значение;

  • ExecuteReader() – возвращает результирующий набор через объект DataReader.

Все эти методы исполняют на источнике данных команду, представленную объектом Command, и отличаются возвращаемым значением.

Метод ExecuteNonQuery() – самый простой, он не возвращает никаких значений. Этот метод обычно применяют для вызова хранимых процедур или команд SQL, таких как insert, update или delete. Метод ExecuteScalar() возвращает только значение первого поля первой строки, извлеченной заданной командой, независимо от того, сколько строк выбрано этой командой в действительности.

Метод ExecuteReader() возвращает неизменяемый объект DataReader, допускающий только последовательный однонаправленный просмотр без использования объекта DataAdapter. Если не нужно модифицировать содержимое базы данных или манипулировать им, этот способ извлечения данных является самым быстрым и эффективным.

Класс SqlCommand поддерживает еще один метод – ExecuteXmlReader(), возвращающий результирующий набор в формате XML. Результаты возвращаются в виде неизменяемого объекта XmlReader, доступного только для последовательного однонаправленного просмотра.