使用实体框架从存储过程获取数据时出现参数问题



我的目标是从存储过程中获取报告列表,并将该列表作为JSON返回。我在控制器的其他地方使用了类似的代码,这里的不同之处在于我编写的存储过程需要一个参数,这就是问题所在。

抛出的错误是"System。异常:必须声明标量变量"@DynamicCategoryId";我已经尝试了几种不同的方法来让参数工作,没有运气。

下面是我的代码:
[HttpGet]
[Route("GetReports/{categoryId}")]
public string GetReports(int categoryId)
{
List<GetReporsResult> paramaters = new List<GetReporsResult>();
try
{
SqlParameter paramCategoryId = new SqlParameter("@DynamicCategoryId", SqlDbType.Int);
paramCategoryId.SourceColumn = "@DynamicCategoryId";
paramCategoryId.Value = categoryId;
paramCategoryId.Direction = ParameterDirection.Input;
paramaters = context.GetReporsResult.FromSqlRaw("EXEC dbo.GetReports @DynamicCategoryId", paramCategoryId.Value).ToList();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
return JsonConvert.SerializeObject(paramaters);
}
有趣的是,如果我这样做("EXEC dbo)。GetReports";+ categoryId.ToString())可以工作,但这不是一个好的做法。

永远不要使用Parameter。作为参数的值。检查类别id,可能为空。

试试这段代码,它在很多地方被使用了很多次

var paramCategoryId = new SqlParameter("@DynamicCategoryId", categoryId);
paramaters = context.GetReporsResult.FromSqlRaw("EXEC dbo.GetReports @DynamicCategoryId", 
paramCategoryId).ToList();

或者我通常用

paramaters = context.GetReporsResult.FromSqlRaw("EXEC dbo.GetReports @DynamicCategoryId", 
parameters: new[] { paramCategoryId} ).ToList();

相关内容

  • 没有找到相关文章

最新更新