Как элегантно проверить возвращаемое значение хранимой процедуры - PullRequest
0 голосов
/ 25 июня 2009

Вот моя текущая реализация хранимой процедуры, которая возвращает статус заказа для данного идентификатора заказа. Есть две ситуации,

  1. есть соответствующий идентификатор заказа, и я получу соответствующий статус,
  2. нет соответствующего идентификатора заказа (т. Е. Несуществующего идентификатора заказа).

Моя путаница заключается в том, как элегантно / эффективно реализовать две функции в одной хранимой процедуре, чтобы я возвращал совпадающий идентификатор заказа для ситуации 1, а также указываю, что у клиента нет совпадающего идентификатора заказа в ситуации 2?

Я использую VSTS 2008 + C # + ADO.Net + .Net 3.5 в качестве клиента и использую SQL Server 2008 в качестве сервера.

CREATE PROCEDURE [dbo].[GetStatus] 
    @ID [nvarchar](256),
    @Status [int] output
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    SELECT @Status = [Status] 
    FROM [dbo].[OrderStatus]        
    WHERE (@ID = [ID]);
END

спасибо заранее, George

Ответы [ 3 ]

3 голосов
/ 25 июня 2009

почему вы используете выходной параметр.

вам просто нужно взять результат вашей хранимой процедуры в набор данных уровня доступа к данным. просто проверьте, что if (dataset! = null) затем примите значение, иначе верните соответствующее сообщение вашему бизнес-уровню.

2 голосов
/ 25 июня 2009

Существует несколько подходов:

  1. Сохраните все как есть и в своем коде .NET, если возвращаемое значение @status равно DBNull, то это будет указывать на ситуацию 2, в противном случае - на ситуацию 1.

  2. Добавьте оператор RETURN в SPROC и используйте

    Dim returnValue As New SqlParameter ("@ RETURN_VALUE", SqlDbType.Int)

    returnValue.Direction = ParameterDirection.ReturnValue

    Cmd.Parameters.Add (ReturnValue)

    в вашем .NET-коде, чтобы явно определить, что SPROC вернул, и принять соответствующие меры.

В качестве дополнительного совета используйте SET вместо SELECT при назначении значения переменной @Status в SPROC. Это гарантирует, что вы получите NULL обратно, если совпадений не найдено. Итак,

` - Вставьте заявления для процедуры здесь

SET @Status = SELECT [Status] 
FROM [dbo].[OrderStatus]            
WHERE (@ID = [ID]);`
1 голос
/ 25 июня 2009

Вы можете использовать операторы if внутри хранимых процедур. веб-сайт внизу дает вам несколько советов.

http://translate.google.com.br/translate?u=http%3A%2F%2Fmail.firebase.com.br%2Fpipermail%2Flista_firebase.com.br%2F2005-November%2F021883.html&sl=pt&tl=en&hl=pt-BR&ie=UTF-8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...