如何使用 FromSqlInterpolated 的 SQL 输出参数?或替代

How to use a SQL output parameter with FromSqlInterpolated? Or alternative

使用 ASP.Net 核心 3.0。我的数据库查询有效 - 我可以获得结果集(记录),但是如何 pass/get 输出参数?还想知道是否有办法获得 return 值。

我尝试使用不同的方式来调用 SQL 查询,而我唯一能够开始工作的方式是 FromSqlInterpolated,但对不同的方法开放。

这段代码对我有用,但我想传递一个额外的参数,该参数可以作为输出参数填充(当我通过从 SQL 服务器中调用存储过程来测试它时,它正在工作)。

var result = _context.Users
        .FromSqlInterpolated($"EXEC mystoredproc  {user.Username} ").AsEnumerable().FirstOrDefault();

我尝试在调用前创建一个变量

string out1 = null;

然后在调用中包含它,但我无法弄清楚语法,我不确定这种方法是否支持它。

var result = _context.Users
        .FromSqlInterpolated($"EXEC mystoredproc  {user.Username},  OUTPUT {out1}").AsEnumerable().FirstOrDefault();
Console.WriteLine(out1);

希望有人能给我指出正确的方向——想知道如何使用输出参数以及如何获取 return 值,而不仅仅是记录集。谢谢。

接受的答案似乎对我不起作用。 但是,我最终通过使用以下代码

设法使 OUTPUT 参数起作用
 var p0 = new SqlParameter("@userName", {user.Username});
 var p1 = new SqlParameter("@out1", System.Data.SqlDbType.NVarChar, 20) { Direction = System.Data.ParameterDirection.Output };

 string out1 = null;
 var result = _context.Users
    .FromSqlRaw($"EXEC mystoredproc  @userName, @out1 OUTPUT ", p0, p1).AsEnumerable().FirstOrDefault();

 Console.WriteLine(p1.Value); // Contains the new value of the p1 parameter

只是一个小警告,p1 值 属性 只会在请求执行时更改(通过 AsEnumerableLoad() 或任何强制 Sql执行)