4 votes

Problème d'ajout de paramètre

SqlParameter param = new SqlParameter();
param.ParameterName = "@name";
param.Value = tableName;
SqlCommand cmd = new SqlCommand("select * from @name", con);
cmd.Parameters.Add(param);
SqlDataReader rd = cmd.ExecuteReader();

Le code ci-dessus donne lieu au message d'erreur suivant :

Doit déclarer la variable de table "@name".

Pourquoi est-ce que je reçois cette erreur et comment puis-je la corriger ?

4voto

Jon Skeet Points 692016

Les requêtes paramétrées traitent généralement des paramètres de valeurs dans la requête - pas pour les noms de tables, de colonnes, etc. Je ne crois pas que SQL Server supporte le paramétrage du nom de la table.

Vous voudrez probablement restreindre les noms à un ensemble connu de noms de tables valides (pour éviter les attaques par injection SQL, etc.), et utiliser le remplacement / le formatage / la méthode normale des chaînes pour construire la requête.

2voto

Abdul Muqtadir Points 3887

Requête erronée

select * from @name

Veuillez le corriger, après From le nom de la table ou de la vue est attendu, vous devez mettre votre paramètre comme suit 'select * from MyTable where col1 = @param' .

Vous ne pouvez pas mettre @param à la place du nom de la table. Utilisez String.Format("select * from {0}", "MyTable"); à la place.

1voto

Pranay Rana Points 69934

Plutôt que de passer le nom dans la requête vous pouvez facilement le remplacer ici

string s = "select * from " + name;
SqlCommand cmd = new SqlCommand(s, con);
SqlDataReader rd = cmd.ExecuteReader();

mais cela provoquera l'erreur d'injection sql

Je vous suggère donc d'opter pour l'exécution de requêtes dynamiques dans le serveur sql, ce que vous pouvez faire à l'aide de SP_ExecuteSQL .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X