具有 LIKE 和 IN 条件的参数化查询
参数化查询中的一个常见障碍是处理涉及 IN 和 LIKE 子句的复杂条件。在这种情况下,确保使用正确的语法来实现参数化和有效性至关重要。
考虑以下场景:
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID IN (@categoryids) OR name LIKE '%@name%' ", conn); comm.Parameters.Add("@categoryids", SqlDbType.Int); comm.Parameters["@categoryids"].Value = CategoryIDs; comm.Parameters.Add("@name", SqlDbType.Int); comm.Parameters["@name"].Value = Name;
这里的目标是构造一个查询根据以逗号分隔的类别 ID (CategoryID) 列表和可能包含特殊字符的字符串 (Name) 检索产品。但是,上面的代码将无法正常运行,因为:
正确的语法需要多步骤方法:
以下代码演示了修改后的方法:
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952, 1953, 1954, 1955, 1972, 2022 }; 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 条件的要求。
以上是如何使用 LIKE 和 IN 子句正确参数化 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!