Как получить значение вывода из хранимой процедуры с помощью: OUTPUT INSERTED.BrandDrugDetailsID - PullRequest
2 голосов
/ 16 февраля 2010

У меня есть хранимая процедура:

CREATE PROCEDURE [dbo].[BrandDrugDetailsInsert]
    @BrandDrugDetailsID uniqueidentifier OUTPUT,
    @BrandDrugID uniqueidentifier
AS
BEGIN
    INSERT INTO Pharmacy_BrandDrugDetails(BrandDrugID) OUTPUT INSERTED.BrandDrugDetailsID
    VALUES (@BrandDrugID)
END

Каждый раз, когда я пытаюсь получить значение "@BrandDrugDetailsID", используйте:

param[0] = new SqlParameter("@BrandDrugDetailsID", SqlDbType.UniqueIdentifier);
param[0].Direction = ParameterDirection.Output;
.
.
.

identity = new Guid(param[0].Value.ToString());

Я получаю нулевое значение.

Если я пытаюсь выполнить хранимую процедуру в самом SQL Server, возвращаются три значения:

  • BrandDrugDetialsID = "471D08BA-382B-4F83-BECC-F96FEF84B5A5"
  • @ BrandDrugDetialsID = NULL
  • Возвращаемое значение = 0

Я не могу понять, что я делаю неправильно. Пожалуйста, помогите мне.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2010

Вы ничего не делаете с битом INSERTED.BrandDrugDetailsID, который фактически поместил бы его в переменную @BrandDrugDetailsID. Вам нужно будет либо ВЫВОДИТЬ в табличную переменную, а затем вручную записать значение в @BrandDrugDetailsID, либо просто использовать ExecuteScalar для доступа к единственному значению, которое ваша процедура возвращает в настоящее время.

2 голосов
/ 16 февраля 2010

Я считаю, что когда вы используете предложение OUTPUT в операторе INSERT, строки возвращаются как набор результатов. Поэтому вместо использования параметра OUTPUT в хранимой процедуре просто запустите YourSqlCommand.ExecuteScalar (), и появится BrandDrugDetailsID.

0 голосов
/ 10 мая 2016

Для тех, кто использует Entityframework 6 или ниже, все, что вам нужно сделать, это:

   using (var db = new AppEntity) 
      {
         var BrandDrugDetailsID = db.BrandDrugDetailsInsert(BrandDrugID).FirstOrDefault();
      }
0 голосов
/ 16 февраля 2010

Вы уверены, что ваш сохраненный процесс работает. Как значение INSERTED.BrandDrugDetailsID превращается в ваш выходной параметр @BrandDrugDetailsID?

DECLARE @TableVar Table (@NewBrandDrugDetailsID uniqueidentifier)

INSERT INTO Pharmacy_BrandDrugDetails(BrandDrugID) OUTPUT INSERTED.BrandDrugDetailsID INTO @TableVar
    VALUES (@BrandDrugID)

SELECT @BrandDrugDetailsID = @NewBrandDrugDetailsID FROM @TableVar

** Отказ от ответственности, я не проверял это! **

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