Die Verwendung parametrisierter Abfragen in .Net folgt normalerweise einem bestimmten Muster, wie im Beispiel gezeigt:
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID = @categoryid ", conn); comm.Parameters.Add("@categoryid", SqlDbType.Int); comm.Parameters["@categoryid"].Value = CategoryID;
Die Durchführung komplexerer Abfragen mit Bedingungen wie IN und LIKE kann jedoch eine Herausforderung sein.
Stellen Sie sich den Fall vor, dass Sie eine Liste von Kategorie-IDs haben, die als durch Kommas getrennte Zeichenfolge gespeichert sind, und einen Produktnamen, der möglicherweise Sonderzeichen enthält. So erstellen Sie eine parametrisierte Abfrage für dieses Szenario:
Brechen Sie die IN-Bedingung auf: Wandeln Sie die durch Kommas getrennte Kategorie-ID-Zeichenfolge in ein Array von Ganzzahlen um.
int[] categoryIDs = Array.ConvertAll(CategoryIDs.Split(','), int.Parse);
Parameternamen generieren: Eine Sequenz von Parametern erstellen Namen, z. B. @p0, @p1, @p2 usw.
string[] parameters = new string[categoryIDs.Length]; for (int i = 0; i < categoryIDs.Length; i++) { parameters[i] = "@p" + i; }
Parameter zum Befehl hinzufügen: Fügen Sie jeden Parameter zum Befehl hinzu mit der entsprechenden Kategorie-ID als Wert.
for (int i = 0; i < categoryIDs.Length; i++) { comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); }
Konstruieren Sie das IN Bedingung: Verknüpfen Sie die Parameternamen in einer durch Kommas getrennten Zeichenfolge innerhalb der IN-Klausel der Abfrage.
WHERE Category_ID IN (" + string.Join(",", parameters) + ")
Verarbeiten Sie die LIKE-Bedingung: Parametrisieren die LIKE-Bedingung durch Verwendung eines Platzhalterzeichens und der Eingabezeichenfolge.
OR name LIKE @name
wobei @name ein Parameter ist, der dem Befehl mit hinzugefügt wird die Eingabezeichenfolge als Wert.
Alles zusammen ergibt die parametrisierte Abfrage:
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952 }; SqlCommand comm = conn.CreateCommand(); string[] parameters = new string[categoryIDs.Length]; for(int i=0;i<categoryIDs.Length;i++) { parameters[i] = "@p"+i; comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); } comm.Parameters.AddWithValue("@name",$"%{Name}%"); comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN ("; comm.CommandText += string.Join(",", parameters) + ")"; comm.CommandText += " OR name LIKE @name";
Dieser Ansatz erstellt eine vollständig parametrisierte Abfrage, die sowohl IN als auch anspricht LIKE-Bedingungen mit richtiger Parametrisierung.
Das obige ist der detaillierte Inhalt vonWie können parametrisierte Abfragen mit LIKE- und IN-Bedingungen in .NET effektiv verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!