
- •Лекция № 1. Информационные системы и базы данных.
- •1.5. Документация и методы ее формирования.
- •Лекция № 2. Информационные системы и базы данных. Субд. Определение базы данных.
- •Компоненты sql Server
- •Лекция № 3. Основы языка запросов sql.
- •3.1 Компоненты sql
- •Предложение Описание
- •Операции sql
- •3.2 Запрос на выборку
- •Лекция № 4. Основы языка запросов sql.
- •4.1. Удаление записей с помощью запроса
- •4.2 Добавление записей с помощью запроса
- •4.3 Запрос на обновление
- •4.4 Реализация операции соединения с помощью запроса
- •4.5. Реализация операции объединения с помощью запроса
- •Лекция № 5. Платформа .Net.
- •Лекция № 6. Знакомство с языком программирования с#.
- •Объектно-ориентированное программирование
- •Лек ция № 7. Создание клиентских приложений Windows.
- •Объекты ado.Net
- •Лек ция № 8. Создание клиентских приложений Windows. Подключение к бд
- •Команды для манипулирования данными
- •Параметры
- •Применение объекта DataReader
- •Модификация и обновление данных
- •Модификация данных
- •Связывание, просмотр и фильтрация данных
- •Литература
Команды для манипулирования данными
Объект 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( );