Requêtes paramétrées avec des conditions LIKE et IN
Dans le monde de la programmation .NET, les requêtes paramétrées sont généralement simples à configurer. Cependant, des difficultés surviennent lorsqu'il s'agit de conditions complexes impliquant plusieurs valeurs.
Considérez la requête suivante qui inclut à la fois une condition IN et une condition 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;
Dans ce cas, CategoryIDs est un liste de nombres séparés par des virgules et Nom est une chaîne pouvant contenir des caractères spéciaux. Le défi réside dans le paramétrage correct de ces valeurs.
Solution
Pour résoudre ce problème, nous construisons une séquence de noms de paramètres @p0 à @pN-1, où N est le nombre d'ID de catégorie dans le tableau. Nous créons ensuite des paramètres pour chaque nom et attribuons l'ID de catégorie correspondant comme valeur.
Pour la condition LIKE, nous utilisons la concaténation de chaînes pour créer une expression de recherche floue contenant @name.
Voici un exemple pour illustrer le processus :
string Name = "someone"; int[] categoryIDs = new int[] { ... }; 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";
Cette requête entièrement paramétrée garantit sécurité et flexibilité dans la gestion de conditions complexes. Bien que l'exemple utilise des tableaux, la technique est applicable à toute collection de valeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!