gpt4 book ai didi

c# - 获取存储过程返回值而不是受影响的行

转载 作者:行者123 更新时间:2023-12-05 04:09:01 25 4
gpt4 key购买 nike

我有一个存储过程,它执行插入并返回插入的最后一行(例如 StudentID)。

 create procedure insertStudent
@...
insert into ... values...
set @StudentId = scope_identity();
select StudentId from ... where StudentId = @StudentId

在代码中,我有

var sql = ...;
using(var connection = new SqlConnection(connectionString)
{
var parameters = new DynamicParameters();
parameters.Add ...;
...
int studentId = connection.Execute(sql, parameters, commandType : CommandType.StoredProcedure);
...
}

connection.Execute 返回受影响的行数。

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

最佳答案

使用查询,而不是执行。执行适用于不返回值的查询。

Dapper 存储库中的文档显示了如何调用返回结果的存储过程:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
commandType: CommandType.StoredProcedure).SingleOrDefault();

您也可以简化存储过程。 INSERT、DELETE 和 UPDATE 有一个 OUTPUT clause可用于通过查询 inserteddeleted 虚拟表来返回原始值和替换值:

 insert into ... 
OUTPUT inserted.StudentID
values...

您的代码可以简化为:

  int studentId = connection.Query<int>("insertStudent", parameters, commandType : CommandType.StoredProcedure)
.SingleOrDefault();

关于c# - 获取存储过程返回值而不是受影响的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46851354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com