通过 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 Core 2:使用 [Authorize] 对 API 的 Ajax 调用使预检请求失败
ASP.NET Core Web API中使用Swagger
即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]