Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Введение в специальность.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
4 Мб
Скачать
☆

Команды для манипулирования данными

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

Для класса 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, отличаются они возвращаемым значением. Метод ExecuteNonQuery — самый простой из них, он не возвращает никаких значений. Этот метод обычно применяют для вызова команд SQL и хранимых процедур, таких, как INSERT, UPDATE или DELETE. Кроме того, вызов этого метода — единственный способ исполнения в ADO.NET команд DDL, например CREATE или ALTER. Метод ExecuteScalar возвращает только значение первого поля первой строки, извлеченной заданной командой, независимо от того, сколько строк выбрано этой командой в действительности. ExecuteReader возвращает неизменяемый объект DataReader, допускающий только последовательный однонаправленный просмотр без использования объекта DataAdapter. Если не требуется модифицировать содержимое БД или как-то иначе манипулировать им, этот способ извлечения данных является самым быстрым и эффективным. Класс SqlCommand поддерживает дополнительный метод — ExecuteXml Reader, возвращающий результирующий набор в формате XML; результаты возвращаются в виде неизменяемого объекта XmlReader, доступного только для последовательно однонаправленного просмотра.

Ниже показан пример, демонстрирующий программное создание объекта SqlConnection, установку параметров конструктора SqlCommand, создание объекта SqlCommand, вызов метода ExecuteScalar и вывод возвращаемого им значения:

using System.Data.SqlClient;

string sqlConnectString = "Data Source=(local);" +

"Integrated security=SSPI;Initial Catalog=AdventureWorks;";

string sqlSelect = "SELECT COUNT(*) FROM Person.Contact";

SqlConnection connection = new SqlConnection(sqlConnectString);

SqlCommand command = new SqlCommand(sqlSelect, connection);

connection.Open( );

int count = Convert.ToInt32(command.ExecuteScalar( ));

connection.Close( );

Console.WriteLine("Record count in Person.Contact = {0}", count);

Console.WriteLine("\nPress any key to continue.");

Console.ReadKey( );