Parametrierte Abfragen mit LIKE- und IN-Bedingungen
In der Welt der .NET-Programmierung sind parametrisierte Abfragen normalerweise einfach einzurichten. Beim Umgang mit komplexen Bedingungen mit mehreren Werten treten jedoch Schwierigkeiten auf.
Betrachten Sie die folgende Abfrage, die sowohl eine IN-Bedingung als auch eine LIKE-Bedingung enthält:
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID IN (@categoryids) OR name LIKE '%@name%' ", conn); comm.Parameters.Add("@categoryids", SqlDbType.Int); comm.Parameters["@categoryids"].Value = CategoryIDs; comm.Parameters.Add("@name", SqlDbType.Int); comm.Parameters["@name"].Value = Name;
In diesem Fall ist CategoryIDs a eine durch Kommas getrennte Liste von Zahlen, und Name ist eine Zeichenfolge, die Sonderzeichen enthalten kann. Die Herausforderung besteht darin, diese Werte richtig zu parametrisieren.
Lösung
Um dieses Problem anzugehen, erstellen wir eine Folge von Parameternamen @p0 bis @pN-1, wobei N ist die Anzahl der Kategorie-IDs im Array. Anschließend erstellen wir Parameter für jeden Namen und weisen die entsprechende Kategorie-ID als Wert zu.
Für die LIKE-Bedingung verwenden wir die Zeichenfolgenverkettung, um einen Fuzzy-Suchausdruck zu erstellen, der @name enthält.
Hier ist ein Beispiel zur Veranschaulichung des Prozesses:
string Name = "someone"; int[] categoryIDs = new int[] { ... }; 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";
Diese vollständig parametrisierte Abfrage gewährleistet Sicherheit und Flexibilität im Umgang mit komplexen Bedingungen. Während das Beispiel Arrays verwendet, ist die Technik auf jede Sammlung von Werten anwendbar.
Das obige ist der detaillierte Inhalt vonWie parametrisiere ich LIKE- und IN-Bedingungen in .NET SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!