CloseConnection;
}
}
В то время как построение параметризированного запроса часто требует большего объема кода, в результате получается более удобный способ для программной настройки операторов SQL и достигается лучшая производительность. Параметризированные запросы также чрезвычайно удобны, когда нужно запускать хранимые процедуры.
Выполнение хранимой процедуры
Вспомните, что
AutoLot определена единственная хранимая процедура по имени GetPetName.Рассмотрим следующий (пока что) финальный метод типа InventoryDal
GetPetName:public string LookUpPetName(int carId)
{
OpenConnection;
string carPetName;
// Установить имя хранимой процедуры.
using (SqlCommand command = new SqlCommand("GetPetName", _sqlConnection))
{
command.CommandType = CommandType.StoredProcedure;
// Входной параметр.
SqlParameter param = new SqlParameter
{
ParameterName = "@carId",
SqlDbType = SqlDbType.Int,
Value = carId,
Direction = ParameterDirection.Input
};
command.Parameters.Add(param);
// Выходной параметр.
param = new SqlParameter
{
ParameterName = "@petName",
SqlDbType = SqlDbType.NVarChar,
Size = 50,
Direction = ParameterDirection.Output
};
command.Parameters.Add(param);
// Выполнить хранимую процедуру.
command.ExecuteNonQuery;
// Возвратить выходной параметр.
carPetName = (string)command.Parameters["@petName"].Value;
CloseConnection;
}
return carPetName;
}
С вызовом хранимых процедур связан один важный аспект: объект команды может представлять оператор SQL (по умолчанию) либо имя хранимой процедуры. Когда объекту команды необходимо сообщить о том, что он будет вызывать хранимую процедуру, потребуется указать имя этой процедуры (в аргументе конструктора или в свойстве CommandText
CommandType в CommandType.StoredProcedure. (В противном случае возникнет исключение времени выполнения, т.к. по умолчанию объект команды ожидает оператор SQL.)Далее обратите внимание, что свойство Direction
@petName установлено в ParameterDirection.Output. Как и ранее, все объекты параметров добавляются в коллекцию параметров объекта команды.После того, как хранимая процедура, запущенная вызовом метода ExecuteNonQuery
// Возвратить выходной параметр.
carPetName = (string)command.Parameters["@petName"].Value;
К настоящему моменту вы располагаете простейшей библиотекой доступа к данным, которую можно задействовать при построении клиента для отображения и редактирования данных. Вопросы создания графических пользовательских интерфейсов пока не обсуждались, поэтому мы протестируем полученную библиотеку доступа к данным с помощью нового консольного приложения.
Создание консольного клиентского приложения
Добавьте к решению AutoLot.Dal
AutoLot.Client) и ссылку на проект AutoLot.Dal. Ниже приведены соответствующие CLI-команды dotnet (предполагается, что ваше решение называется Chapter21_А11Projects.sin):dotnet new console -lang c# -n AutoLot.Client -o .\AutoLot.Client -f net5.0
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT