我有一个存储过程,我想在其中获取特定表的最后插入行,例如表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;
但是结果仍然是空的吗?
这是我的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中执行时效果很好
答案 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,我们会发现它们的区别以及何时使用它们。