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

时间:2019-10-30 15:02:36

标签: sql-server .net-core asp.net-core-3.0

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

我尝试使用不同的方法来调用SQL查询,而我唯一能够使用的方法是FromSqlInterpolated,但是可以使用其他方法。

此代码对我有用,但我想传递一个可以填充为输出参数的附加参数(当我通过从SQL Server内部调用存储的proc对其进行测试时,此参数将起作用)。

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);

希望有人可以为我指明正确的方向-不仅要知道如何使用输出参数,而且要如何获得返回值,而不仅仅是记录集。谢谢。

1 个答案:

答案 0 :(得分:-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

只是警告,p1值属性仅在执行请求时(由AsEnumerableLoad()或强制执行Sql的任何东西)才会更改