Heim >Datenbank >MySQL-Tutorial >Wie verwende ich eine Liste sicher als SqlParameter für eine SQL IN-Anweisung?

Wie verwende ich eine Liste sicher als SqlParameter für eine SQL IN-Anweisung?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-28 07:05:23900Durchsuche

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

Übersetzen einer Liste in einen SqlParameter für eine SQL-IN-Anweisung

In der Abfrage eingeschlossen gibt eine „IN“-Anweisung an, dass eine bestimmte Spalte einen passenden Wert innerhalb einer bereitgestellten Werteliste haben muss. Bei der Arbeit mit SQL IN-Anweisungen unter Verwendung eines SqlCommand-Objekts kann es zu Verwirrung hinsichtlich der Konvertierung eines List-Objekts kommen. in einen kompatiblen SqlParameter.

Im bereitgestellten Codeausschnitt:

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();

Der Parameter „settingsList“ stellt eine List dar. enthält die Werte, die in der IN-Anweisung ausgewertet werden sollen. Eine direkte Zuordnung des List zu einem SqlParameter löst aufgrund der Inkompatibilität mit bekannten Anbietertypen eine Ausnahme aus.

Um eine IN-Abfrage mit SqlCommands sicher auszuführen, sollten Sie den folgenden Ansatz in Betracht ziehen:

  1. Anweisung erstellen mit Platzhalter:
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";

In dieser Aussage {0} dient als Platzhalter für die im nächsten Schritt generierte dynamische Parameterliste.

  1. Parameter-Array vorbereiten:
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();

Hier , das String-Array paramArray wird abgeleitet, indem die SettingsList durchlaufen wird und jeder Wert einem benannten Parameter der Form „@settings0“, „@settings1“ zugewiesen wird. usw.

  1. Anweisung mit Parametern kombinieren:
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));

Die Format-Methode kombiniert die Anweisungsvorlage mit der Parameterliste, was zu einer parametrisierten SQL-Anweisung.

  1. Hinzufügen Parameter:
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}

Einzelne Parameter werden dem SqlCommand-Objekt mithilfe einer Schleife hinzugefügt, die die SettingsList durchläuft, um sicherzustellen, dass jeder Wert einen entsprechenden Parameter hat.

Von Wenn Sie diese Schritte befolgen, können Sie mithilfe eines List effektiv eine IN-Abfrage mit einem SqlCommand-Objekt durchführen. als Eingabe unter gleichzeitiger Wahrung der Datensicherheit und der Verhinderung potenzieller Injektionsangriffe.

Das obige ist der detaillierte Inhalt vonWie verwende ich eine Liste sicher als SqlParameter für eine SQL IN-Anweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn