【问题标题】:Pass a String as Parameter Into _context.Database.SqlQuery ASP.NET MVC 5将字符串作为参数传递到 _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)。

我该如何处理这个问题?

【问题讨论】:

标签: c# sql-server asp.net-mvc


【解决方案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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多