Comment utiliser des caractères génériques dans une requête SQL avec des paramètres
Dire que j'ai une requête de base, quelque chose comme ceci:
SELECT holiday_name
FROM holiday
WHERE holiday_name LIKE %Hallow%
Cela exécute bien dans ma requête sql volet et renvoie 'Halloween'. Mon problème survient lorsque je tente d'utiliser des paramètres avec le caractère générique de caractères " % " dans mon code.
SqlConnection Connection = null;
SqlCommand Command = null;
string ConnectionString = ConfigurationManager.ConnectionStrings["SQLdb"].ConnectionString;
string CommandText = "SELECT holiday_name "
+ "FROM holiday "
+ "WHERE holiday_name LIKE %@name%";
Connection = new SqlConnection(ConnectionString);
try
{
Connection.Open();
Command = new SqlCommand(CommandText, Connection);
Command.Parameters.Add(new SqlParameter("name", HolidayTextBox.Text));
var results = Command.ExecuteScalar();
}
catch (Exception ex)
{
//error stuff here
}
finally
{
Command.Dispose();
Connection.Close();
}
Cela déclenche une syntaxe incorrecte erreur. J'ai essayé de déplacer le '%' pour mon paramètre comme
Command.Parameters.Add(new SqlParameter("%name%", HolidayTextBox.Text));
mais ensuite j'ai un message d'erreur disant que je n'ai pas déclaré la variable scalaire '@name". Alors, comment voulez-vous formater correctement les caractères génériques pour être inclus avec les paramètres de la requête? Toute aide est appréciée!
source d'informationauteur ovaltein
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, votre
SqlParameter
nom est@name
pasname
.Deuxième, je voudrais déplacer vos jokers.
Donc il devrait ressembler à ceci:
Noter que
LIKE
nécessite une attention particulière lors du passage de paramètres et vous devez vous échapper certains caractères L'échappement des caractères spéciaux dans un SQL COMME énoncé à l'aide de paramètres sql.quoi que vous fassiez ne pas faire cette:
comme qui va vous ouvrir à l'injection sql, au lieu de faire ceci:
vous pouvez, comme de savoir sur Commande.Les paramètres.AddWithValue, e.g:
La
%
s devraient faire partie de la chaîne de recherche, pas la requête.