Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Выполнение хранимых процедур с помощью DbCommand
Выполнение хранимых процедур с помощью DbCommand
Хранимой процедурой называется блок программного кода SQL сохраненный в базе данных. Хранимые процедуры могут создаваться для того, чтобы возвращать наборы строк или скалярных типов данных, и могут иметь любое число необязательных параметров. Результатом является рабочая "единица", которая ведет себя подобно типичной функции, с той очевидной разницей, что размещается она в хранилище данных, а не в двоичном рабочем объекте.
Замечание. Хотя обсуждение соответствующей темы в этой главе не предполагается, самая новая версия Microsoft SQL Server (2005) включает в себя CLR-хост! Таким образом, хранимые процедуры (и другие атомарные единицы базы данных) могут создаваться с помощью управляемых языков (например, C#), а не только с помощью традиционного языка SQL. Подробности можно найти на страницах http://www.microsoft.com/sql/2005.
Для иллюстрации соответствующего процесса давайте добавим в программу CarInventoryUpdate новую опцию, которая позволит пользователю выяснить название автомобиля с помощью хранимой процедуры GetPetName. Этот объект базы данных был создан при установке базы данных Cars, и выглядит он так.
CREATE PROCEDURE GetPetName
@carID int,
@petName char(20) output
AS
SELECT @petName = PetName from Inventory where CarID = @carID
Сначала обновите имеющийся в Main() оператор switch, добавив в него обработку нового случая "P" для вызова новой вспомогательной функции с именем LookUpPetName(). которая принимает параметр SqlConnection и возвращает void. Обновите также метод ShowInstructions(), учитывая новый вариант выбора.
Чтобы выполнить хранимую процедуру, следует, как всегда, сначала создать новый объект соединения, сконфигурировать строку соединения и открыть сеанс. Но при создании объекта команды свойству CommandText следует присвоить имя хранимой процедуры (а не SQL-запрос). Также вы обязательно должны установить для свойства CommandType значение CommandType.StoredProcedure (значением по умолчанию является CommandType.Text).
Поскольку наша хранимая процедура имеет один входной и один выходной параметры, нашей целью является построение объекта команды, содержащего два объекта SqlParameter в своей коллекции параметров.
private static void LookUpPetName(SqlConnection cn) {
// Получение номера машины.
Console.Write("Введите номер машины: ");
int carID = int.Parse(Console.ReadLine());
// Установка имени хранимой процедуры.
SqlCommand cmd = new SqlCommand("GetPetName", cn);
cmd.CommandType = CommandType.StoredProcedure;
// Входной параметр.
SqlParameter param = new SqlParameter();
param.ParameterName = "@carID";
param.SqlDbType = SqlDbType.Int;
param.Value = carID;
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
// Выходной параметр.
param = new SqlParameter();
param.ParameterName = "@petName";
param.SqlDbType = SqlDbType.Char;
param.Size = 20;
param.Direction = ParameterDirection.Output();
cmd.Parameters.Add(param);
// Выполнение хранимой процедуры.
cmd.ExecuteNonQuery();
// Печать выходного параметра.
Console.WriteLine("Машина {0} называется {1}'', carID, cmd.Parameters["@petName"].Value);
}
Обратите внимание на то, что свойство Direction объекта параметра позволяет указать входные и выходные параметры. По завершении вызова хранимой процедуры с помощью ExecuteNonQuery() вы можете получить значение выходного параметра, обратившись к коллекции параметров объекта команды. На рис. 22.9 показан один из возможных вариантов тестового запуска программы.
Рис. 22.9. Вызов хранимой процедуры
Исходный код. Проект СarsInventoryUpdater размещен в подкаталоге, соответствующем главе 22.
- Высокоуровневое определение ADO.NET
- Поставщики данных ADO.NET
- Дополнительные пространства имен ADO.NET
- Типы System.Data
- Интерфейсы и абстрактные поставщики данных
- Файлы конфигурации и гибкость приложений
- Модель источника поставщика данных .NET 2.0
- Элемент ‹connectionStrings›
- Установка базы данных Cars
- Связный уровень ADO.NET
- Работа с объектами чтения данных
- Изменение содержимого таблиц с помощью объектов команд
- Работа с объектами параметризованных команд
- Выполнение хранимых процедур с помощью DbCommand
- Асинхронный доступ к данным в .NET 2.0
- Несвязный уровень ADO.NET
- Роль DataSet
- Работа с DataColumn
- Работа с DataRow
- Работа с DataTable
- Сохранение DataSet (и DataTable) в формате XML
- Привязка DataTable к интерфейсу пользователя
- Работа с типом DataView
- Работа с адаптерами данных
- Обновление базы данных с помощью объекта адаптера данных
- Генерирование SQL-команд с помощью типов построителя команд
- Объекты DataSet с множеством таблиц и объекты DataRelation
- Возможности мастеров данных
- Резюме
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Увеличение глубины рекурсии процедур и триггеров
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Обработка запросов с помощью PHP
- Текстовые сообщения процедуры POST
- Хранимые процедуры выбора
- Как с помощью компьютера подшутить над друзьями и коллегами?
- Как составить психологический портрет с помощью Сети?
- Хочу следить за «здоровьем» винчестера. С помощью какой программы это можно делать?
- Как открыть каталог с помощью командной строки?