使用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);
希望有人可以为我指明正确的方向-不仅要知道如何使用输出参数,而且要如何获得返回值,而不仅仅是记录集。谢谢。
答案 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值属性仅在执行请求时(由AsEnumerable
,Load()
或强制执行Sql的任何东西)才会更改