Requêtes paramétrées avec des conditions LIKE et IN
Un obstacle courant dans les requêtes paramétrées est la gestion de conditions complexes impliquant des clauses IN et LIKE. Dans de tels scénarios, il est crucial de s'assurer que la syntaxe correcte est utilisée pour obtenir à la fois le paramétrage et l'efficacité.
Considérez le scénario suivant :
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;
Ici, l'objectif est de construire une requête qui récupère les produits en fonction d'une liste d'ID de catégorie (CategoryIDs) séparés par des virgules et d'une chaîne (Name) pouvant contenir des caractères spéciaux. Cependant, le code ci-dessus ne fonctionnera pas correctement car :
La syntaxe correcte nécessite une approche en plusieurs étapes :
Le code suivant illustre la version révisée approche :
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";
Ce code produit une requête entièrement paramétrée qui satisfait aux exigences des conditions IN et LIKE.
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!