C#. Out params of the stored procedures

Хранимая процедура может использовать не только входные параметры, через которые передаются значения в процедуру, но и выходные параметры. Выходные параметры по сути представляют результат работы процедуры, те значения, которые она возвращает пользователю.

Опять же возьмем наш базу данных и определим в ней следующую хранимую процедуру:

В этой процедуре определено три параметра, с помощью которых мы будем получать минимальный и максимальный возраст в базе данных. Через параметр @name мы будем получать имя пользователя, для которого осуществляется поиск минимального и максимального возраста. Причем в данном случае параметр по умолчанию имеет значение ‘%’. Данное значение указывает на произвольную строку. То есть если значение для этого параметра передано, то процедура будет находить возраст только для пользователей с этим именем. Если же значение для параметра не передано, то процедура будет находить минимальный и максимальный возраст всех пользователей вне зависимости от имени.

Параметры @minAge и @maxAge являются выходными благодаря указанию ключевого слова out в их определении. Через них мы собственно и будем получать минимальный и максимальный возраст.

Теперь перейдем к программе на C# и определим в ней следующий код:

Выходные параметры команды определяются также, как и входные за тем исключением, что для свойства Direction нам надо установить значение ParameterDirection.Output. По умолчанию все параметры имеют значение ParameterDirection.Input, которое указывает, что они являются входными.

После выполнения команды с помощью метода ExecuteNonOuery() мы можем получить параметры по названию или по их индексу в коллекции параметров: command.Parameters["название параметра"]. И чтобы получить само значение параметра, надо использовать его свойство Value.

Теперь мы можем ввести имя пользователя, либо просто нажать на Enter, и процедура вернет нам выходные параметры. При этом может возникнуть ситуация, что пользователя с введенным именем не окажется в системе, и тогда параметры будут содержать пустые значения.

This entry was posted in C#. Bookmark the permalink.