如何使用C#的SqlCommand获取IDENT_CURRENT结果?

时间:2019-12-30 08:00:20

标签: c# sql-server stored-procedures

我有一个存储过程,我想在其中获取特定表的最后插入行,例如表TbUsers,因此在它的最后,我键入该行:

select IDENT_CURRENT('TbUsers')

现在,我想使用SqlCommand在C#中获得该结果;我将这些参数传递给存储过程:

SqlCommand command = new SqlCommand("InsertUsers", conn);
command.CommandType = System.Data.CommandType.StoredProcedure;

/* Insert in TbUsager */
SqlParameter[] parameters = new SqlParameter[]
        {
           new SqlParameter("@firstName" ,value.firstname),
           new SqlParameter("@lastName",value.lastname),
           new SqlParameter("@email",value.email),
           new SqlParameter("@phoneNumber",value.phoneNumber),
           new SqlParameter("@address",value.address),
           new SqlParameter("@country",value.country),
           new SqlParameter("@city",value.city),
           new SqlParameter("@zipCode",value.zip_code)
        };
command.Parameters.AddRange(parameters);

var rdr = command.ExecuteReader()

如何获取存储过程的返回结果?

更新

我已添加此代码:

  // command.Parameters.AddRange(parameters);
        var LastInsertedUsagerId = new SqlParameter("@lastInsertedUsagerId", System.Data.SqlDbType.Int);
        LastInsertedUsagerId.Direction = ParameterDirection.Output;
        command.Parameters.Add(LastInsertedUsagerId);

    //    var rdr = command.ExecuteReader();

        var LastInsertedUsagerId2 = command.Parameters["@LastInsertedUsagerId"].Value;

但是结果仍然是空的吗?

Update2

这是我的SP:

ALTER PROCEDURE [dbo].[InsertUsager]
-- Add the parameters for the stored procedure here
@Nom_Usager varchar(20),
@Prenom_Usager varchar(20),
@Email_Usager varchar(20),
@Telephone_Portable_Usager  varchar(20),
@Adresse_Usager varchar(20),
@Pays_Usager varchar(20),
@Ville_Usager varchar(20),
@IdVille_Usager varchar(20),
@LastInserted_IdUsager int OUTPUT
AS
 BEGIN


-- Insert a new usager 

declare @IdinsertedUsager table(IdinsertedUsager int)
declare @IdAddressVillePayselse table(IdAddressVillePayselse int)
declare @newUsager int , @IdAddressVillePays int , @addressvp int,@IdCountry int,@IdVille int



Insert into TbUsager (IdTypeUsager,Nom_Usager,Prenom_Usager,Indic_Maj)
Output inserted.IdUsager into @IdinsertedUsager
values(1,@Prenom_Usager,@Nom_Usager,'P')

SELECT @newUsager = IdinsertedUsager FROM @IdinsertedUsager
/* some code */
select @LastInserted_IdUsager=IDENT_CURRENT('TbUsers')
  END

它在我在sqlserver中执行时效果很好

2 个答案:

答案 0 :(得分:3)

假设您在SP中正确返回了身份ID(作为输出参数),则可以在C#代码中按以下方式检索它:

var id = command.Parameters["@id"].Value;

@id更改为SP中输出变量的名称。 以下是详细了解如何正确执行操作的链接:

https://www.aspsnippets.com/Articles/Return-Identity-value-from-Stored-Procedure-in-SQL-Server.aspx

答案 1 :(得分:0)

解决了,除了@Siavash是答案,为了正常工作,我们需要使用: command.ExecuteNonQuery() 而不是 command.ExecuteReader()

In this documentation,我们会发现它们的区别以及何时使用它们。