Вернуть значения из хранимых процедур в C # - PullRequest
5 голосов
/ 29 декабря 2008

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

select SCOPE_IDENTITY()
return

Затем я получаю значение, вызывая executeScalar(). Это работает отлично. Тем не менее, я чувствую, что было бы правильнее просто закончить с return select SCOPE_IDENTITY() (и не создавать новый параметр для этого возвращаемого значения, либо). Это возможно?

1 Ответ

9 голосов
/ 29 декабря 2008

В общем, есть три способа сделать это ... Вы можете сделать то, что вы делаете - с эффектом Select - возвращая одну строку, один столбец результатов и позволяя ADO.Net извлекать значение для вы. Или

вы можете использовать оператор return для возврата значения (этот подход узурпирует шаблон общего использования для возвращаемых значений возврата кода ошибки) или

вы можете использовать так называемый параметр OutPut (фактически передавая хранимому процессу ссылку на параметр, который он (процесс) может заполнить значением, которое затем будет доступно вызывающему коду ADO.net после процедуры возвращается ...

у каждого есть свои преимущества и недостатки ... Мне нравится первый вариант, потому что его проще и проще кодировать ... (это не самый лучший вариант)

пример использования выходного параметра в хранимых процессах ...

  Create Procedure MyProc
  @Name varchar(20),
  @DOB DateTime,
  @EmployeeId Integer Output = Null
  As
  Set NoCount On

     If @EmployeeId Is Null 
       Begin
          Insert Employees(Name, DateofBirth)
          Values (@Name, @DOB)
          Set @EmployeeId = Scope_Identity()
       End
     Else If Exists(Select * From Employees
                    Where EmployeeId =@EmployeeId)
       Begin
           Update Employees Set
              Name = Isnull(@Name, Name),
              DateOfBirth = IsNull(@DOB, DateOfBirth)
           Where EmployeeId = @EmployeeId
       End
     Else
        Raiserror('EmployeeId %d is missing or has been deleted.',
                   16, 1, @EmployeeId)

     Return 0

Когда вы вызываете сохраненный процесс из ADO.Net и добавляете этот параметр в коллекцию параметров ... возникает перегрузка, которая принимает параметр метода, который является перечислением, называемым ParameterDirection, который может принимать значения ParameterDirection.InputOutput или ParameterDirection Выход, (среди прочих)

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