Ajustement dynamique des requêtes pour les noms de colonnes dans C# SqlCommand
Lorsque vous essayez de spécifier des noms de colonnes à l'aide de paramètres dans un objet SqlCommand, vous pouvez rencontrer un erreur indiquant que les paramètres ne peuvent pas être utilisés pour les noms de colonnes. Cette limitation pose un défi lors de la tentative d'exécution de requêtes dont les noms de colonnes peuvent varier.
Problème :
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
Le code ci-dessus tente d'exécuter une requête avec une colonne dynamique noms utilisant des paramètres, mais il échoue avec l’erreur susmentionnée. Une solution de contournement potentielle suggérée consiste à utiliser des procédures stockées (SP) avec des déclarations de variables pour les noms de colonnes. Cependant, cette approche peut être fastidieuse.
Solution :
Au lieu de paramétrer le nom de la colonne, vous pouvez créer la requête de manière dynamique au moment de l'exécution. Pour garantir la sécurité, vous devez mettre l’entrée sur liste blanche pour éviter les attaques par injection. Voici un exemple de la façon dont vous pouvez y parvenir :
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
Dans ce code, la valeur de "slot" est utilisée pour créer la chaîne de requête pendant l'exécution. Le paramètre "name" est toujours spécifié à l'aide d'un paramètre pour empêcher l'injection SQL. En construisant dynamiquement la requête, vous pouvez surmonter la limitation liée à l'utilisation de paramètres pour les noms de colonnes dans SqlCommand.
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!