在 .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 等条件执行更复杂的查询可以
考虑这样一种情况,您有一个存储为逗号分隔字符串的类别 ID 列表和一个可能包含特殊字符的产品名称。要为此场景构建参数化查询:
分解 IN 条件: 将逗号分隔的类别 ID 字符串转换为整数数组。
int[] categoryIDs = Array.ConvertAll(CategoryIDs.Split(','), int.Parse);
生成参数名称: 创建一系列参数名称,例如 @p0、@p1、@p2 等。
string[] parameters = new string[categoryIDs.Length]; for (int i = 0; i < categoryIDs.Length; i++) { parameters[i] = "@p" + i; }
将参数添加到命令中: 将每个参数添加到命令中,并以对应的类别ID作为其
for (int i = 0; i < categoryIDs.Length; i++) { comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); }
构造 IN 条件: 将参数名称连接到查询的 IN 子句中以逗号分隔的字符串中。
WHERE Category_ID IN (" + string.Join(",", parameters) + ")
处理喜欢条件: 使用通配符和输入字符串参数化 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中文网其他相关文章!