如何使用以下方法从存储过程检索值输出:OUTPUT INSERTED.BrandDrugDetailsID

时间:2010-02-16 10:51:30

标签: c# sql sql-server sql-server-2005

我有一个存储过程:

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 个答案:

答案 0 :(得分:2)

我相信当您在INSERT语句中使用OUTPUT子句时,这些行将作为结果集返回。因此,不要在存储过程中使用OUTPUT参数,只需运行YourSqlCommand.ExecuteScalar(),BrandDrugDetailsID就会出现。

答案 1 :(得分:2)

您没有对INSERTED.BrandDrugDetailsID位执行任何操作,而该位实际上会将其放在@BrandDrugDetailsID变量中。您必须输出OUTPUT到表变量然后手动将值写入@BrandDrugDetailsID,或者只是使用ExecuteScalar来访问过程当前返回的单个值。

答案 2 :(得分:0)

您确定存储过程正常吗? 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

**免责声明,我没有测试过这个! **

答案 3 :(得分:0)

对于使用Entityframework 6或更低版本的用户,您需要做的就是:

   using (var db = new AppEntity) 
      {
         var BrandDrugDetailsID = db.BrandDrugDetailsInsert(BrandDrugID).FirstOrDefault();
      }