c# - 返回 EF Core Database.ExecuteSqlInterpolatedAsync 的存储过程值
问题描述
我有这个 C# 方法,它调用执行插入语句的有效存储过程。如何在插入语句后取回身份(主键)。
public async Task AddFileFolderStructure(int id, string folderName, string folderType)
{
var sproc_cmd = "dbo.AddFileFolderStructure";
await Database.ExecuteSqlInterpolatedAsync($"{sproc_cmd} {id}, {folderName}, {folderType}");
}
这是我修改后的存储过程
ALTER PROCEDURE [dbo].[AddFileFolderStructure]
(@ParentId INT,
@FolderName VARCHAR(255),
@FolderType VARCHAR(255),
@id int OUTPUT)
AS
BEGIN
INSERT INTO [FileFolders]
VALUES (@ParentId, @FolderName, @FolderType)
SELECT @id = SCOPE_IDENTITY();
RETURN @id
END
解决方案
我没有对此进行测试,但它应该可以工作:
var output = new SqlParameter();
output.ParameterName = "@Id";
output.SqlDbType = SqlDbType.Int;
output.Direction = ParameterDirection.Output;
await Database.ExecuteSqlInterpolatedAsync("EXEC {0} @param1={1} OUT,@param2={2}, @param3={3} " sproc_cmd,output,folderName,folderType);
推荐阅读
- ios - 在 iOS Maps Embed API 中点击“查看大地图”后无法返回应用
- java - org.w3c.dom.DOMException: DOM005 Wrong document in Java while using Xcerces
- linux - 如何知道当前进程数以及哪个进程分叉了大多数进程?
- java - 启动画面显示 FATAL EXCEPTION: main 后 Android 应用程序崩溃
- python - 没有在字典列表中循环两次的情况下如何根据另一个中的键值来更改一个
- python - 如何格式化numpy数组?
- django - django 一次清理多个字段
- android - 无法启动守护进程。错误仍然存在
- microsoft-teams - Microsoft Teams Webhook 为自适应卡生成 400
- python-3.x - 我如何对阿拉伯语列表进行排序