首页 > 数据库 > mysql教程 > 如何在 .NET 中有效地使用带有 LIKE 和 IN 条件的参数化查询?

如何在 .NET 中有效地使用带有 LIKE 和 IN 条件的参数化查询?

Patricia Arquette
发布: 2024-12-29 05:38:17
原创
160 人浏览过

How to Effectively Use Parameterized Queries with LIKE and IN Conditions in .NET?

具有 LIKE 和 IN 条件的参数化查询

在 .Net 中使用参数化查询通常遵循特定模式,如示例中所示:

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID = @categoryid
", 
   conn);
comm.Parameters.Add("@categoryid", SqlDbType.Int);
comm.Parameters["@categoryid"].Value = CategoryID;
登录后复制

但是,使用 IN 和 LIKE 等条件执行更复杂的查询可以

实现 IN 和 LIKE 条件

考虑这样一种情况,您有一个存储为逗号分隔字符串的类别 ID 列表和一个可能包含特殊字符的产品名称。要为此场景构建参数化查询:

  1. 分解 IN 条件: 将逗号分隔的类别 ID 字符串转换为整数数组。

    int[] categoryIDs = Array.ConvertAll(CategoryIDs.Split(','), int.Parse);
    登录后复制
  2. 生成参数名称: 创建一系列参数名称,例如 @p0、@p1、@p2 等。

    string[] parameters = new string[categoryIDs.Length];
    for (int i = 0; i < categoryIDs.Length; i++)
    {
       parameters[i] = "@p" + i;
    }
    登录后复制
  3. 将参数添加到命令中: 将每个参数添加到命令中,并以对应的类别ID作为其

    for (int i = 0; i < categoryIDs.Length; i++)
    {
       comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
    }
    登录后复制
  4. 构造 IN 条件: 将参数名称连接到查询的 IN 子句中以逗号分隔的字符串中。

    WHERE Category_ID IN (" + string.Join(",", parameters) + ")
    登录后复制
  5. 处理喜欢条件: 使用通配符和输入字符串参数化 LIKE 条件。

    OR name LIKE @name
    登录后复制

    其中 @name 是添加到命令中的参数,以输入字符串作为其值。

把它们放在一起,参数化查询就变成了:

string Name = "someone";
int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952 };

SqlCommand comm = conn.CreateCommand();

string[] parameters = new string[categoryIDs.Length];
for(int i=0;i<categoryIDs.Length;i++)
{
   parameters[i] = "@p"+i;
   comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
}
comm.Parameters.AddWithValue("@name",$"%{Name}%");
comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN (";
comm.CommandText += string.Join(",", parameters) + ")";
comm.CommandText += " OR name LIKE @name";
登录后复制

这个方法创建一个完全参数化的查询,通过适当的参数化来解决 IN 和 LIKE 条件。

以上是如何在 .NET 中有效地使用带有 LIKE 和 IN 条件的参数化查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板