sql >> Database >  >> RDS >> Sqlserver

Geparametriseerde dynamische SQL-query

Je doet hier een paar dingen verkeerd:

  • Je geeft al je parameters dezelfde naam @searchitem . Dat zal niet werken. De parameters hebben unieke namen nodig.
  • Je maakt een nieuwe SqlCommand voor elk item. Dat zal niet werken. Maak de SqlCommand eenmaal aan het begin van de lus en stel vervolgens CommandText in als je klaar bent met het maken van de SQL.
  • Uw SQL eindigt op AND , wat geen geldige syntaxis is.

Suggesties voor verbetering (niet per se verkeerd, maar ook niet best practice):

  • Zoals Frederik suggereerde, is de gebruikelijke manier om de % tokens in de parameter, in plaats van stringconcatenatie binnen de SQL uit te voeren.
  • Tenzij u expliciet een hoofdlettergevoelige sortering voor uw database gebruikt, moeten vergelijkingen hoofdletterongevoelig zijn. Het is dus mogelijk dat u de LOWER . niet nodig heeft .

Codevoorbeeld:

SqlCommand cmd = new SqlCommand();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.Append("SELECT name, memberid FROM members ");

var i = 1;
foreach (string item in keywords)
{
    sqlBuilder.Append(i == 1 ? " WHERE " : " AND ");
    var paramName = "@searchitem" + i.ToString();
    sqlBuilder.AppendFormat(" Name LIKE {0} ", paramName); 
    cmd.Parameters.AddWithValue(paramName, "%" + item + "%");

    i++;
}
cmd.CommandText = sqlBuilder.ToString();


  1. Gegevens invoegen in mysql met Java

  2. $_SESSION variabelen worden niet opgeslagen wanneer automatisch ingelogd

  3. SQL Server JSON_Modify, hoe alles bijwerken?

  4. ER_NOT_SUPPORTED_AUTH_MODE - MySQL-server