Dynamisches SQL mit Spaltennamenparametern in C#
Können Sie Spaltennamen als Parameter in eine SqlCommand-Abfrage einschließen? Die Antwort lautet normalerweise „Nein“. Der Grund dafür ist, dass die Datenbank-Engine den Abfrageplan verarbeitet, wenn die Verbindung geöffnet wird und bevor Sie Parameter festgelegt haben. Es gibt jedoch einige Techniken, die Sie nutzen können, um das gewünschte Ergebnis zu erzielen.
Betrachten wir dieses Szenario:
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
Dieser Code schlägt fehl. Stattdessen müssen Sie die Abfrage zur Laufzeit dynamisch erstellen und dabei sicherstellen, dass die Eingaben ordnungsgemäß auf die Whitelist gesetzt werden, um Injektionsangriffe zu verhindern:
// Verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
Bei diesem Ansatz bleibt @name parametrisiert, was eine sichere und effiziente Ausführung der Abfrage ermöglicht .
Das obige ist der detaillierte Inhalt vonKönnen Spaltennamen Parameter in C# Dynamic SQL sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!