通过 ASP.NET Core Web API 使用存储过程从 SQL Server 返回多个行集

Posted

技术标签:

【中文标题】通过 ASP.NET Core Web API 使用存储过程从 SQL Server 返回多个行集【英文标题】:Returning multiple rowsets from SQL Server using a stored procedure via an ASP.NET Core Web API 【发布时间】:2021-10-31 06:03:31 【问题描述】:

我是 C#、.NET Core 和一般中间件的新手,只是为了管理所包含代码的预期。

尽管我已经设法构建了一个非常基本的 API,它接受一个参数,使用该参数运行一个存储过程并返回一个“表”结果。存储过程生成两个行集,但是只有一个通过 API 一直返回,我无法弄清楚原因。

行集不是相关的,一个只是具有使用在第二个stored procedure output 返回的原始数据计算的值。

已经尝试了一些方法,包括设置 MultipleActiveResultSets=True,但问题可能出在 the 上,我无法找到适合我的解决方案。如果有人能够指出我正确的方向,那就太好了。

API 输出

[
  
    "pcd": "BA1 1UA",
    "crimesInArea": 711,
    "density": 37.1,
    "crimeScore": 1916
  
]

ASP.NET Core 5 Web 应用组件

连接字符串

"MyConn": "Server=Server,1433;Initial Catalog=HouseValueChecker;Persist Security Info=False;User ID=user;Password=password;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

输出表映射

[Keyless]
public class Outputs

    //[Key]
    public string pcd  get; set; 
    public int CrimesInArea  get; set; 
    public double Density  get; set; 
    public int CrimeScore  get; set; 


public class CrimeList

    public string Crime_Type  get; set; 
    public float Latitude  get; set; 
    public float Longitude  get; set; 

上下文

public class CallSPDBContext : DbContext

    public CallSPDBContext(DbContextOptions<CallSPDBContext> options):base(options)
    
    

    public DbSet<MoveHereAPI.Models.DB.Outputs> Outputs  get; set; 
    public DbSet<MoveHereAPI.Models.DB.Outputs> CrimeList  get; set; 

控制器

[HttpPost]
public async Task<ActionResult<IEnumerable<Outputs>>> GetOutputs(Input input)

    string storedProc = "exec usp_GetCrimeData " + "@Postcode = '" + input.Postcode + "'";
    return await _context.Outputs.FromSqlRaw(storedProc).ToListAsync();

【问题讨论】:

实体框架再次来袭! Does this help?我知道代码看起来很吓人,但你可以责怪实体框架。也许改用Dapper? :D 旁注:您应该使用正确的参数化,FromSqlRaw 支持,请参阅文档 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

试试这个

var postCodeParam = new SqlParameter("@Postcode",input.Postcode);

 return await _context.Outputs.FromSqlRaw("exec usp_GetCrimeData  @Postcode",postCodeParam).ToListAsync();

【讨论】:

以上是关于通过 ASP.NET Core Web API 使用存储过程从 SQL Server 返回多个行集的主要内容,如果未能解决你的问题,请参考以下文章

asp.net web.config的设置问题

ASP.NET Core 2:使用 [Authorize] 对 API 的 Ajax 调用使预检请求失败

ASP.NET Core Web API中使用Swagger

即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]

通过 ASP.NET Core Web API 使用存储过程从 SQL Server 返回多个行集

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?