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