如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值
Posted
技术标签:
【中文标题】如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值【英文标题】:How to get return value from SQL Server stored procedure in ASP.NET Core Web API 【发布时间】:2022-01-06 20:28:25 【问题描述】:我正在创建一个 ASP.NET Core 5 Web API。我试图从 SQL Server 存储过程中获取返回值。
这是我的代码:
public async Task<bool> Login(EmployeeDO _loginDO)
var parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@RetnParam", ParameterDirection.ReturnValue));
parameters.Add(new SqlParameter("@LoginId", _loginDO.empno));
parameters.Add(new SqlParameter("@LoginPwd", _loginDO.password));
string StoredProc = "exec PR_ABCXYZ " +
"@LoginId = " + _loginDO.empno + "," +
"@LoginPwd = '" + _loginDO.password + "'";
var result = await DbContext.Database.ExecuteSqlRawAsync(StoredProc);
bool ret = Convert.ToBoolean(result);
return ret;
结果总是返回-1。
【问题讨论】:
exec PR_ABCXYZ
应该是exec @RetnParam = PR_ABCXYZ
嗨 Dale,它会抛出错误“必须声明标量变量“@RetnParam”。”
可能是因为您没有将参数列表传递给 ExecuteSqlRawAsync?
您似乎在数据库中以明文形式存储密码您不能这样做!
加载...这个问题经常被问到...一个快速的谷歌应该找到你很多例子。
【参考方案1】:
试试这个:
public async Task<bool> Login(EmployeeDO _loginDO)
var parameters = new List<SqlParameter>();
// **param name should not have @ here **
parameters.Add(new SqlParameter("RetnParam", ParameterDirection.ReturnValue));
parameters.Add(new SqlParameter("LoginId", _loginDO.empno));
parameters.Add(new SqlParameter("LoginPwd", _loginDO.password));
string StoredProc = "exec @RetnParam = PR_ABCXYZ @LoginId @LoginPwd"; // **No need to concatenate @LoginId and @LoginPwd values here**
await DbContext.Database.ExecuteSqlRawAsync(StoredProc, parameters); // **pass parameters here**
bool ret = Convert.ToBoolean(parameters[0].Value); // **use RetnParam value
return ret;
【讨论】:
以上是关于如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值
如何使用 fetch 将 FormData 从 javascript 发送到 ASP.NET Core 2.1 Web API
如何在 ASP.NET Core Web API 中使用 LINQ 仅从数据库中获取最新的 id?
来自静态类的 ASP.NET Core Web API 日志记录