Heim >Datenbank >MySQL-Tutorial >Wie können parametrisierte Abfragen mit LIKE- und IN-Bedingungen in .NET effektiv verwendet werden?

Wie können parametrisierte Abfragen mit LIKE- und IN-Bedingungen in .NET effektiv verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 05:38:17168Durchsuche

How to Effectively Use Parameterized Queries with LIKE and IN Conditions in .NET?

Parametrierte Abfragen mit LIKE- und IN-Bedingungen

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.

Die Implementierung von IN und LIKE-Bedingungen

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:

  1. 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);
  2. 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;
    }
  3. 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]);
    }
  4. 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) + ")
  5. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn