【问题标题】:MySql passing paramater gives different resultMySql 传递参数给出不同的结果
【发布时间】:2019-03-14 17:13:58
【问题描述】:

我有 ASP.NET Core 网站,我正在使用以下命令从数据库中加载一些产品:

using (MySqlCommand cmd = new MySqlCommand("SELECT ROBAID, KATBR, NAZIV,
                            SLIKA FROM ROBA WHERE PODGRUPAID IN (@PG)", con))
{
    cmd.Parameters.AddWithValue("@PG", "PODGRUPAID");

    // Other reading code
}

问题是这样我只得到前 2 个产品作为结果(在 Inspector 内的 MySqlDataReader 内)但是当我将命令字符串更改为 SELECT ROBAID, KATBR, NAZIV, SLIKA FROM ROBA WHERE PODGRUPAID IN (PODGRUPAID) 而不通过命令添加参数时,我得到所有结果......

【问题讨论】:

    标签: c# mysql asp.net asp.net-core


    【解决方案1】:

    PODGRUPAID 的价值是什么? PODGRUPAID 是否类似于“A、B、C”?如果是这样,该命令将更像SELECT ROBAID, KATBR, NAZIV, SLIKA FROM ROBA WHERE PODGRUPAID = 'A, B, C'(作为一个完整的字符串)。你可以试试Using comma separated value parameter strings in SQL IN clauses

    【讨论】:

      【解决方案2】:

      实际上,您在此参数值定义中将PODGRUPAID 作为字符串传递:

      cmd.Parameters.AddWithValue("@PG", "PODGRUPAID");
      

      这导致只有具有特定值PODGRUPAID 的值将被选中,我发现你不能像这样简单地将参数添加到IN 子句。如果要包含多个值,可以使用 FIND_IN_SET 代替 IN 子句:

      string podGrupAIDs = "value1,value2,...";
      
      using (MySqlCommand cmd = new MySqlCommand(@"SELECT ROBAID, KATBR, NAZIV,
                                  SLIKA FROM ROBA WHERE FIND_IN_SET(PODGRUPAID, @PG)", con))
      {
          cmd.Parameters.AddWithValue("@PG", podGrupAIDs);
      
          // Other reading code
      }
      

      如果值来自数组或List<T>T = 任何值类型),您可以在使用FIND_IN_SET 之前将它们与string.Join() 连接起来:

      List<string> values = new List<string>() { "value1", "value2", ... };
      
      using (MySqlCommand cmd = new MySqlCommand(@"SELECT ROBAID, KATBR, NAZIV,
                                  SLIKA FROM ROBA WHERE FIND_IN_SET(PODGRUPAID, @PG)", con))
      {
          cmd.Parameters.AddWithValue("@PG", string.Join(",", values));
      
          // Other reading code
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 2019-06-07
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多