2016-05-12 6 views
0

ich diesen Code bekam:C# vorbereitete SQL-Anweisung ersetzt nicht @Value

command = new SQLiteCommand(dbConnection); 
sql = "SELECT IFNULL(MAX(RowId), 1) AS Id FROM @name"; 
SQLiteParameter nameParam = new SQLiteParameter("@name", System.Data.DbType.String, 100); 
command.CommandText = sql; 
command.Parameters.Add(nameParam); 
command.Prepare(); 

foreach (String name in liste) 
{ 
    command.Parameters[0].Value = name; 
    int number = Convert.ToInt32(command.ExecuteScalar()); 
    ret = ret + number; 
} 

dbConnection.Close(); 
return ret; 

Was mache ich falsch? Beim Ausführen dieser Anweisung bekomme ich immer die folgende Ausnahme:

"in der Nähe von" @name ": Syntaxfehler".

Das bedeutet also die SQL-Anweisung wird nicht durch den vorbereiteten Anweisungsparameter aktualisiert, warum ist das?

+0

Sie können einen Tabellennamen nicht als Parameter übergeben. – user1666620

Antwort

2

Sie können einen Tabellennamen nicht als Parameter übergeben.

Sie könnten es zum String hinzufügen, wenn Sie die SQL-Anweisung bilden, aber dann laufen Sie Gefahr, dass SQL injiziert wird. Tun Sie das nicht.

Eine weitere Sache, die Sie tun können, ist, dass der Benutzer die Tabelle aus einem Dropdown-Menü auswählt und das SQL erstellt, indem Sie dies tun, da Sie alle möglichen Tabellen bereits kennen.