Vous ne pouvez pas passer le nom de la table en paramètre. Vous devez utiliser SQL dynamique pour ce faire, vous devez donc concentrer la chaîne pour le faire, par exemple
MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)
Mais comme les utilisateurs saisissent le nom de la table, l'injection SQL est donc possible. Vous pouvez utiliser ce SQL pour déterminer si cette table existe avant d'y interroger :
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';
(Vous pouvez parfaitement paramétrer cette requête, ainsi l'injection SQL sera éliminée)
En règle générale, faites attention à l'injection SQL. Mais si vous utilisez cet interne (non exposé à l'utilisateur), l'injection SQL ne devrait pas poser de problème.
Mieux, vous pouvez construire une procédure stockée pour gérer cela, comme dans mon autre réponse :