Хранимые процедуры – предварительно оттранслированное множество предложений SQL и дополнительных предложений для управления потоком, сохраняемое под именем и обрабатываемое (выполняемое) как одно целое. Хранимые процедуры сохраняются непосредственно в базе данных; их выполнение обеспечивается вызовом со стороны приложения; допускает включение объявляемых пользователем переменных, условий и других программируемых возможностей.
В хранимых процедурах могут применяться входные и выходные параметры; сохраняемые процедуры могут возвращать единичные значения и результирующие множества.
Функционально хранимые процедуры аналогичны запросам. Вместе с тем, по сравнению с предложениями SQL, они обладают рядом преимуществ:
Таким образом, хранимые процедуры облегчают работу с базой данных.
Известно три способа создания команд для манипулирования данными:
string cs = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" +
@"F:\SharpUser\CS.book\Rolls.db";
OleDbConnection cn = new OleDbConnection(cs);
cn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = cn; // Объект "Соединение" цепляется к команде!Либо так:
string cs = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" +
@"F:\SharpUser\CS.book\Rolls.db";
OleDbConnection cn = new OleDbConnection(cs);
cn.Open();
OleDbCommand cmd = cn.CreateCommand();// Команда создается соединением!SqlCommand или OleDbCommand перетаскивается в окно конструктора со вкладки Data, при этом остается вручную задать свойства Connection, CommandText, CommandType (для определения типа команды, которая задается в свойстве CommandText). При этом свойство CommandType может принимать одно из трех значений: (1) Text – значение свойства CommandText воспринимается как текст команды SQL. При этом возможна последовательность допустимых операторов, разделенных точкой с запятой; (2) StoredProcedure – значение свойства CommandText воспринимается как имя существующей хранимой процедуры, которая будет исполняться при вызове данной команды; (3) TableDirect – при этом свойство CommandText воспринимается как непустой список имен таблиц, возможно, состоящий из одного элемента. При выполнении команды возвращаются все строки и столбцы этих таблиц; Оба типа объектов "Команда" (SqlCommand и OleDbCommand) поддерживают три метода, которые позволяют исполнять представляемую команду:
ExecuteNonQuery – применяется для выполнения команд SQL и хранимых процедур, таких как INCERT, UPDATE, DELETE. С помощью этого метода также выполняются команды DDL – CREATE, ALTER. Не возвращает никаких значений. ExecuteScalar – обеспечивает выбор строк из таблицы БД. Возвращает значение первого поля первой строки, независимо от общего количества выбранных строк.ExecuteReader – обеспечивает выбор строк из таблицы БД. Возвращает неизменяемый объект DataReader, который допускает последовательный однонаправленный просмотр извлеченных данных без использования объекта DataAdapter.Кроме того, класс SqlCommand поддерживает еще один метод:
ExecuteXmlReader – обеспечивает выбор строк из таблицы БД в формате XML. Возвращает неизменяемый объект XMLReader, который допускает последовательный однонаправленный просмотр извлеченных данных.Назначение всех четырех методов – ИСПОЛНЕНИЕ НА ИСТОЧНИКЕ ДАННЫХ команды, представленной объектом команды.
Данные из базы выбираются в результате выполнения объекта Command. В ADO .NET применяются параметризованные команды. Объект Parameter является средством модификации команд. Представляет свойства и методы, позволяющие определять типы данных и значения параметров.
Манипулирование данными, которое осуществляется в процессе выполнения команд, естественно, требует определенной информации, которая представляется в команде в виде параметров. При этом характер и содержание управляющей дополнительной информации зависит от конкретного состояния базы на момент выполнения приложения.
Это означает, что настройка команды должна быть проведена непосредственно в процессе выполнения приложения. Именно во время выполнения приложения определяются конкретные значения параметров, проводится соответствующая настройка команд и их выполнение.
В структуре команды предусмотрены так называемые ПОЛЯ ПОДСТАНОВКИ. Объект команды при выполнении приложения настраивается путем присвоения значения параметра полю подстановки. Эти самые поля подстановки реализованы в виде свойства Parameters объекта команды. В зависимости от типа провайдера каждый параметр представляется объектом одного из классов: OleDbParameter или SqlParameter.
Необходимое количество параметров для выполнения той или иной команды зависит от конкретных обстоятельств: каждый параметр команды представляется собственным объектом-параметром. Кроме того, если команда представляется сохраняемой процедурой, то может потребоваться дополнительный объект-параметр.
Во время выполнения приложения объект команды предварительно настраивается путем присваивания свойству Parameters списка (вполне возможно, состоящего из одного элемента) соответствующих значений параметров – объектов класса Parameters. При выполнении команды эти значения параметров считываются и либо непосредственно подставляются в шаблон оператора языка SQL, либо передаются в качестве параметров хранимой процедуре.
Параметр команды является объектом довольно сложной структуры, что объясняется широким диапазоном различных действий, которые могут быть осуществлены над базой данных.
Кроме того, работа с конкретной СУБД также накладывает свою специфику на правила формирования объекта команды.