Maison > base de données > tutoriel mysql > Comment utiliser en toute sécurité une liste comme SqlParameter pour une instruction SQL IN ?

Comment utiliser en toute sécurité une liste comme SqlParameter pour une instruction SQL IN ?

Patricia Arquette
Libérer: 2024-12-28 07:05:23
original
887 Les gens l'ont consulté

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

Traduire une liste dans un SqlParameter pour une instruction SQL IN

Incluse dans la requête, une instruction "IN" spécifie qu'une colonne spécifique doit avoir une valeur correspondante dans une liste de valeurs fournie. Lorsque vous travaillez avec des instructions SQL IN utilisant un objet SqlCommand, une confusion peut survenir concernant la conversion d'un objet List dans un SqlParameter compatible.

Dans l'extrait de code fourni :

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();
Copier après la connexion

Le paramètre settingsList représente une List contenant les valeurs à évaluer dans l'instruction IN. Cependant, un mappage direct de la propriété List à un SqlParameter induit une exception en raison d'une incompatibilité avec les types de fournisseurs connus.

Pour exécuter en toute sécurité une requête IN avec SqlCommands, envisagez d'utiliser l'approche suivante :

  1. Instruction de construction avec Espaces réservés :
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";
Copier après la connexion

Dans cette déclaration, {0} sert d'espace réservé pour la liste de paramètres dynamiques générée à l'étape suivante.

  1. Préparer le tableau de paramètres :
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();
Copier après la connexion

Ici , le tableau de chaînes paramArray est dérivé en parcourant la settingsList et en attribuant chaque valeur à un paramètre nommé de la forme "@settings0", "@settings1", etc.

  1. Combiner l'instruction avec les paramètres :
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));
Copier après la connexion

La méthode Format combine le modèle d'instruction avec la liste de paramètres , ce qui donne lieu à une instruction SQL paramétrée.

  1. Ajouter Paramètres :
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}
Copier après la connexion

Des paramètres individuels sont ajoutés à l'objet SqlCommand à l'aide d'une boucle qui parcourt la settingsList pour garantir que chaque valeur a un paramètre correspondant.

Par en suivant ces étapes, vous pouvez effectuer efficacement une requête IN avec un objet SqlCommand à l'aide d'un objet List comme entrée tout en préservant la sécurité des données et en empêchant les attaques potentielles par injection.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal