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

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

Объект 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( );