将字符串作为参数传递到 _context.Database.SqlQuery ASP.NET MVC 5
Posted
技术标签:
【中文标题】将字符串作为参数传递到 _context.Database.SqlQuery ASP.NET MVC 5【英文标题】:Pass a String as Parameter Into _context.Database.SqlQuery ASP.NET MVC 5 【发布时间】:2022-01-14 15:15:14 【问题描述】:我有一个控制器
public ActionResult Index(int[] eo) employes = _context.Database.SqlQuery(select * from table where tableId IN (@p0),String.Join(",", eo))
问题是@p0
的数据是作为字符串传递的,而TableID 是int。调试显示 @p0
为 ('10,2,3,5') 我想要的是 (10,2,3,5)。
我该如何处理这个问题?
【问题讨论】:
eo
是什么类型?
这能回答你的问题吗? Entity Framework Stored Procedure Table Value Parameter
【参考方案1】:
对于 SQL Server,您可以使用 JSON:
public ActionResult Index(int[] eo)
var sql = @"
select *
from table
where tableId IN (select value from openjson(@p0))
";
var json = "[" + String.Join(",", eo) + "]";
var employes = _context.Database.SqlQuery(sql,json).ToList();
【讨论】:
谢谢它的工作,但我只想知道我是否用这种方法打开了自己的 SQL 注入。 不适用于 int[]。如果是 string[] 你需要担心。【参考方案2】:可能有更优雅的方法来解决这个问题,但您可以将字符串拆分为字符串列表并将每个字符串解析为 int。
类似这样的:
string test = "10,2,3,5";
List<string> stringList = test.Split(",").ToList();
List<int> intList = new List<int>();
foreach(string str in stringList)
intList.Add(int.Parse(str));
【讨论】:
以上是关于将字符串作为参数传递到 _context.Database.SqlQuery ASP.NET MVC 5的主要内容,如果未能解决你的问题,请参考以下文章