Vous ne pouvez pas passer le nom de la table comme paramètre. Vous devez utiliser SQL dynamique pour ce faire, vous devez donc à la concentration de la chaîne pour le faire, par exemple
MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)
Mais parce que les entrées des utilisateurs du tableName, l'injection SQL est donc possible. Vous pouvez utiliser ce SQL pour déterminer si cette table existe avant toute requête de celui-ci:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';
(Vous pouvez parfaitement paramétrer cette requête, si l'injection SQL sera éliminé)
En général, prenez garde de l'injection SQL . Mais si vous utilisez cette interne (ne pas exposer à l'utilisateur), l'injection SQL ne devrait pas poser de problème.
Mieux, vous pouvez construire une procédure stockée pour faire face à cela, comme dans mon autre réponse:
Unified SQL getter with LINQ
-1. c'est une mauvaise approche pour utiliser la chaîne pure, parce que je pourrais passer 'tableName =" utilisateurs; DROP TABLE utilisateurs; "', et cela va supprimer la table – Stecya
@Stecya: voir ma réponse mise à jour – Vimvq1987
L'utilisateur va entrer le nom de table. Je préfère ne pas utiliser la procédure stockée, besoin d'une solution côté client – Stecya