Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySqlParameter como TableName


Você não pode passar o nome da tabela como parâmetro. Você tem que usar SQL dinâmico para fazer isso, então você tem que fazer concentração de string para fazer isso, por exemplo
  MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)

Mas como os usuários inserem o tableName, a injeção de SQL é possível. Você pode usar esse SQL para determinar se essa tabela existe antes de consultar qualquer coisa dela:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

(Você pode parametrizar perfeitamente esta consulta, então a injeção de SQL será eliminada)

Geralmente, tenha cuidado com a injeção de SQL. Mas se você usar isso interno (não expor ao usuário), então a injeção de SQL não deve ser problema.

Melhor, você pode construir um procedimento armazenado para lidar com isso, como na minha outra resposta:

Getter SQL unificado com LINQ