当前位置: 首页 > 面试题库 >

具有in子句的C#参数化查询MySQL

叶经略
2023-03-14
问题内容

我正在将几个已硬编码到应用程序中的查询转换为动态的参数化查询。我遇到一个特定的查询,该查询有一个in子句:

UPDATE TABLE_1 SET STATUS = 4 WHERE ID IN (1, 14, 145, 43);

第一个参数很简单,因为它只是一个普通参数:

MySqlCommand m = new MySqlCommand("UPDATE TABLE_1 SET STATUS = ? WHERE ID IN (?);");
m.Parameters.Add(new MySqlParameter("", 2));

但是,第二个参数是一个整数列表,表示需要更新的行的ID。如何为单个参数传递整数列表?或者,您将如何设置此查询,以使您不必每次调用时都完全构建它,并且可以防止SQL注入攻击?


问题答案:

您可以基于(可能)可变数量的参数“动态”构建参数化查询,并对其进行迭代以将其传递。

因此,类似:

List foo; // assuming you have a List of items, in reality, it may be a List<int> or a List<myObject> with an id property, etc.

StringBuilder query = new StringBuilder( "UPDATE TABLE_1 SET STATUS = ? WHERE ID IN ( ?")
for( int i = 1; i++; i < foo.Count )
{   // Bit naive 
    query.Append( ", ?" );
}

query.Append( " );" );

MySqlCommand m = new MySqlCommand(query.ToString());
for( int i = 1; i++; i < foo.Count )
{
    m.Parameters.Add(new MySqlParameter(...));
}


 类似资料:
  • 问题内容: 我该如何对包含一个IN带有可变数量的参数的子句的查询进行参数化(例如这样的查询)? 在此查询中,参数的数量可以在1到5之间的任何位置。 我不希望对此(或XML)使用专用的存储过程,但是如果有一些特定于SQL Server 2008的优雅方法,我可以接受。 问题答案: 这是我使用的一种quick-and-dirty的技术: 因此,这是C#代码: 两个警告: 表现很糟糕。LIKE “%…%

  • 编辑:这不是一个重复的,因为我正在寻找一个使用Spring的解决方案,用于具有多个IN子句的查询,并且参数的大小只有在运行时才知道。

  • 我有一个类Api,它包含一个数据列表:

  • 问题内容: 我有这样的查询: 它与PDO和MySQL Workbench完美配合(根据需要返回10个URL)。 但是我试图用PDO 参数化: 返回空数组。 问题答案: 我只是测试了很多案例。我在OS X上使用PHP 5.3.15,并查询MySQL 5.6.12。 如果您进行以下设置,则任何组合均有效: 以下所有工作 :您可以使用an 或字符串;您不需要使用PDO :: PARAM_INT。 您还可

  • 问题内容: 当表开始增长时,我担心WHERE子句中IN的性能。有没有人对这种查询有更好的策略?子查询返回的记录数比TradeLine表中的记录数增长得慢得多。TradeLine表本身以每天10个的速度增长。 谢谢你。 编辑:我使用了将子查询从WHERE移到FROM的想法。我对有助于此新查询的所有答案投了赞成票。 问题答案: 子句中的子查询不依赖于外部查询中的任何内容。您可以安全地将其移到子句中;一

  • 问题内容: 我如何添加WHERE IN语句,如… 在实体框架中 问题答案: 用途: 或在查询语法中: