将字符串作为参数传递到 _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的主要内容,如果未能解决你的问题,请参考以下文章

将冗长的字符串(作为参数)传递到控制台应用程序

将字符串从控制器传递到部分视图作为 javascript 函数参数

PHP:获取传递的变量的类名?

如何将运行时参数作为依赖解析的一部分传递?

将选择选项值作为 url 参数传递到下一页

如何将带有查询字符串的 url 作为 api 参数传递?