如何从 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 日志记录

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?

从 ASP.NET Web API ASP.NET Core 2 返回 HTML 并获取 http 状态 406