Dynamische Abfrageanpassung für Spaltennamen in C# SqlCommand
Beim Versuch, Spaltennamen mithilfe von Parametern in einem SqlCommand-Objekt anzugeben, kann es zu einem Problem kommen Fehler, der besagt, dass Parameter nicht für Spaltennamen verwendet werden können. Diese Einschränkung stellt eine Herausforderung dar, wenn Sie versuchen, Abfragen auszuführen, bei denen die Spaltennamen variieren können.
Problem:
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
Der obige Code versucht, eine Abfrage mit dynamischen Spalten auszuführen Namen mit Parametern, aber es schlägt mit dem oben genannten Fehler fehl. Als mögliche Problemumgehung wird die Verwendung gespeicherter Prozeduren (SPs) mit Variablendeklarationen für Spaltennamen vorgeschlagen. Dieser Ansatz kann jedoch umständlich sein.
Lösung:
Anstatt den Spaltennamen zu parametrisieren, können Sie die Abfrage dynamisch zur Laufzeit erstellen. Um die Sicherheit zu gewährleisten, sollten Sie die Eingabe auf die Whitelist setzen, um Injektionsangriffe zu verhindern. Hier ist ein Beispiel, wie Sie dies erreichen können:
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
In diesem Code wird der Wert von „slot“ verwendet, um die Abfragezeichenfolge während der Laufzeit zu erstellen. Der Parameter „name“ wird weiterhin über einen Parameter angegeben, um eine SQL-Injection zu verhindern. Durch die dynamische Erstellung der Abfrage können Sie die Einschränkung der Verwendung von Parametern für Spaltennamen in SqlCommand überwinden.
Das obige ist der detaillierte Inhalt vonWie kann ich Spaltennamen in C#-SqlCommand-Abfragen dynamisch angeben und gleichzeitig SQL-Injection verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!