Parametrierte Abfragen mit LIKE- und IN-Bedingungen
Ein häufiges Hindernis bei parametrisierten Abfragen ist die Handhabung komplexer Bedingungen mit IN- und LIKE-Klauseln. In solchen Szenarien ist es wichtig sicherzustellen, dass die richtige Syntax verwendet wird, um sowohl Parametrisierung als auch Effektivität zu erreichen.
Stellen Sie sich das folgende Szenario vor:
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;
Hier besteht das Ziel darin, eine Abfrage zu erstellen das Produkte basierend auf einer durch Kommas getrennten Liste von Kategorie-IDs (CategoryIDs) und einer Zeichenfolge (Name) abruft, die Sonderzeichen enthalten kann. Der obige Code funktioniert jedoch nicht ordnungsgemäß, weil:
Die richtige Syntax erfordert einen mehrstufigen Ansatz:
Der folgende Code demonstriert die Überarbeitung Ansatz:
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952, 1953, 1954, 1955, 1972, 2022 }; 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 Code erzeugt eine vollständig parametrisierte Abfrage, die die Anforderungen sowohl der IN- als auch der LIKE-Bedingungen erfüllt.
Das obige ist der detaillierte Inhalt vonWie parametrisiert man SQL-Abfragen richtig mit LIKE- und IN-Klauseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!