如何将 SQL 输出参数与 FromSqlInterpolated 一起使用?或者替代方案

use*_*318 5 sql-server .net-core asp.net-core-3.0

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

我尝试使用不同的方法来调用 SQL 查询,我唯一能够使用的方法是 FromSqlInterpolated,但对不同的方法持开放态度。

这段代码对我有用,但我想传递一个可以作为输出参数填充的附加参数(当我通过从 SQL Server 中调用存储过程来测试它时,该参数起作用)。

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

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

string out1 = null;
Run Code Online (Sandbox Code Playgroud)

然后将其包含在调用中,但我无法弄清楚语法,并且不确定此方法是否支持它。

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

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

nma*_*iot -1

接受的答案似乎对我不起作用。不过我最终设法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
Run Code Online (Sandbox Code Playgroud)

只是一个小警告,仅当执行请求时(通过 或任何强制 Sql 执行的内容),p1 值属性AsEnumerable才会Load()更改