Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySqlParameter als Tabellenname

Sie können den Tabellennamen nicht als Parameter übergeben. Sie müssen dazu dynamisches SQL verwenden, also müssen Sie die Zeichenfolge konzentrieren, zum Beispiel

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

Da Benutzer jedoch den Tabellennamen eingeben, ist eine SQL-Einschleusung möglich. Sie können diese SQL verwenden, um festzustellen, ob diese Tabelle existiert, bevor Sie etwas von ihr abfragen:

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

(Sie können diese Abfrage perfekt parametrisieren, sodass SQL-Injection eliminiert wird)

Seien Sie im Allgemeinen vorsichtig mit der SQL-Injektion. Aber wenn Sie dies intern verwenden (nicht dem Benutzer zugänglich machen), sollte die SQL-Injektion kein Problem darstellen.

Besser, Sie können eine gespeicherte Prozedur erstellen, um damit umzugehen, wie in meiner anderen Antwort:

Unified SQL-Getter mit LINQ