Eines vorweg – grundsätzlich sollte man SQL-Befehle nicht, wie hier beschrieben, im Code zusammenbauen. Ein Problem sind vor allem SQL-Injections welche z.B. so umgangen werden können.
Hier soll daher nur der Aufbau eines SQL-Statements, daß mehrere Suchbegriffe über mehrere Felder (Tabellen-Spalten) suchen kann, beschrieben werden. Einzelne Begriffe werden mit UND verknüpft.
// C# // String mit mehreren Begriffen, von z.B. einer TextBox string searchWords = TextBox1.Text; // die einzelnen Suchbegriffe in ein Array packen string[] searchWordsArray = searchWords.Trim().Split(); // beginn des SQL-Statements... string sqlStatement = "SELECT * FROM Tabelle WHERE"; // Prüfung - gibt es überhaupt was zu suchen if (!string.isEmptyOrNull(searchWords.Trim())) { // einzelne Suchbegriffe extrahieren foreach (string searchWord in searchWordsArray) { // Begriff darf in irgendeinem Felder stehen > ODER, // zweiter Begriff aber auch in irgendeinem Feld > UND sqlStatement += "(Spalte1 LIKE '%" + searchWord + "%' OR Spalte2 LIKE '%" + searchWord + "%') AND "; } // letzte 4 Zeichen (AND) löschen sqlStatement = sqlStatement.Substring(0,sqlStatement.Length-5); } // ggf. noch eine Sortierung einfügen... sqlStatement += " ORDER BY DateCreated DESC ";
SQL bei der Suche nach: „A“:
SELECT * FROM Tabelle WHERE (Spalte1 LIKE '%" + A + "%' OR Spalte2 LIKE '%" + A + "%') ORDER BY DateCreated DESC
SQL bei der Suche nach: „A B C“:
SELECT * FROM Tabelle WHERE (Spalte1 LIKE '%" + A + "%' OR Spalte2 LIKE '%" + A + "%') AND (Spalte1 LIKE '%" + B + "%' OR Spalte2 LIKE '%" + B + "%') AND (Spalte1 LIKE '%" + C + "%' OR Spalte2 LIKE '%" + C + "%') ORDER BY DateCreated DESC