L'utilisation de requêtes paramétrées dans .Net suit généralement un modèle spécifique, comme démontré dans l'exemple :
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID = @categoryid ", conn); comm.Parameters.Add("@categoryid", SqlDbType.Int); comm.Parameters["@categoryid"].Value = CategoryID;
Cependant, effectuer des requêtes plus complexes avec des conditions telles que IN et LIKE peut s'avérer difficile.
Considérons le cas où vous disposez d'une liste d'ID de catégorie stockés sous forme de chaîne séparée par des virgules et d'un nom de produit contenant potentiellement des caractères spéciaux. Pour construire une requête paramétrée pour ce scénario :
Décomposez la condition IN : Convertissez la chaîne d'ID de catégorie séparée par des virgules en un tableau d'entiers.
int[] categoryIDs = Array.ConvertAll(CategoryIDs.Split(','), int.Parse);
Générer des noms de paramètres : Créer une séquence de noms de paramètres, par exemple @p0, @p1, @p2, etc.
string[] parameters = new string[categoryIDs.Length]; for (int i = 0; i < categoryIDs.Length; i++) { parameters[i] = "@p" + i; }
Ajouter des paramètres à la commande : Ajoutez chaque paramètre à la commande avec l'ID de catégorie correspondant comme valeur.
for (int i = 0; i < categoryIDs.Length; i++) { comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); }
Construisez le Condition IN : Joignez les noms des paramètres dans une chaîne séparée par des virgules dans la clause IN de la requête.
WHERE Category_ID IN (" + string.Join(",", parameters) + ")
Gérez la condition LIKE : Paramétrez la condition LIKE en utilisant un caractère générique et la chaîne d'entrée.
OR name LIKE @name
où @name est un paramètre ajouté au commande avec la chaîne d'entrée comme valeur.
En mettant le tout ensemble, la requête paramétrée devient :
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";
Cette approche crée une requête entièrement paramétrée qui adresse à la fois Conditions IN et LIKE avec paramétrage approprié.
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!