Mysql
 sql >> Database >  >> RDS >> Mysql

MySqlParameter come TableName

Non puoi passare il nome della tabella come parametro. Devi usare SQL dinamico per farlo, quindi devi stringere la concentrazione per farlo, ad esempio

  MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)

Ma poiché gli utenti immettono tableName, è possibile l'iniezione SQL. Puoi usare questo SQL per determinare se quella tabella esiste prima di interrogare qualsiasi cosa da essa:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

(Puoi parametrizzare perfettamente questa query, quindi l'iniezione SQL verrà eliminata)

In generale, fai attenzione all'iniezione SQL. Ma se usi questo interno (non esposto all'utente), l'iniezione SQL non dovrebbe essere un problema.

Meglio, puoi costruire una stored procedure per affrontare questo, come nella mia altra risposta:

Getter SQL unificato con LINQ