sql >> Database teknologi >  >> RDS >> Sqlserver

Parametriseret dynamisk sql-forespørgsel

Du gør et par ting forkert her:

  • Du giver alle dine parametre det samme navn @searchitem . Det vil ikke virke. Parametrene skal have unikke navne.
  • Du opretter en ny SqlCommand for hvert element. Det vil ikke virke. Opret SqlCommand en gang i begyndelsen af ​​løkken, og indstil derefter CommandText når du er færdig med at oprette SQL.
  • Din SQL ender med AND , som ikke er gyldig syntaks.

Forslag til forbedringer (ikke forkert i sig selv, men heller ikke bedste praksis):

  • Som Frederik foreslog, er den sædvanlige måde at sætte % tokens i parameteren, i stedet for at lave strengsammenkædning inde i SQL.
  • Medmindre du udtrykkeligt bruger en versalfølsom sortering til din database, bør sammenligninger være ufølsomme for store og små bogstaver. Derfor har du muligvis ikke brug for LOWER .

Kodeeksempel:

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. Ven af ​​en ven i PHP/MySQL?

  2. TSQL-2008 SUM(X) OVER (OPDELING ... ORDER BY CLAUSE)

  3. Python MySQLdb undtagelser

  4. JDBC returnerer tomt resultatsæt