Comment utiliser paramètre avec LIKE dans SQL Server Compact Edition
Je suis en train de paramétrer une requête de recherche qui utilise le mot clé LIKE avec un caractère générique. La version d'origine de sql dynamique sql comme ceci:
"AND JOB_POSTCODE LIKE '" + isPostCode + "%' "
J'ai donc essayé ce lieu, mais je reçois un FormatException:
"AND JOB_POSTCODE LIKE @postcode + '%' "
Edit: je suppose que le FormatException ne va pas être à venir à partir de Sql Server CE, donc, comme demandé, voici comment j'ai réglé le paramètre dans mon code C#. Le paramètre est défini dans le code comme ceci:
command.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = isPostCode;
J'ai aussi essayé:
"AND JOB_POSTCODE LIKE @postcode"
avec
command.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = isPostCode + "%";
mais qui ne renvoie aucun résultat. Quelqu'un peut conseiller sur la façon d'utiliser les paramètres dans cette recherche sql?
source d'informationauteur Colin
Vous devez vous connecter pour publier un commentaire.
La réponse courte est que vous devez mettre le générique de la Valeur du paramètre, pas dans le CommandText. c'est à dire
pas que:
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode%"
ce:
Longue réponse ici:
Je suis de retour et dépouillé mon code à l'essentiel afin que je puisse le poster ici, et tout en faisant cela, j'ai découvert que la dernière méthode que j'ai essayé dans ma question initiale ne fonctionnent réellement. Doit avoir été quelque chose de mal dans mes tests. Voici donc un résumé, avec plein de code qui est exécuté:
D'origine de sql dynamique, vulnérable à l'injection sql:
Première tentative d'utiliser le paramètre donne une erreur:
Deuxième technique fait le travail:
Merci pour tous les commentaires, et désolé à propos de l'origine trompeuse question...
Cela renvoie résultats appropriés dans SQL Server 05 (fonctionne également enveloppé dans une SP), donc il semble que la dernière chose que vous avez essayé devraient avoir travaillé. Mais je n'ai pas de banc d'essai pour Compact Edition, donc peut-être que cela fait une différence (je serais curieux de voir si c'est ainsi, et pourquoi).
EDIT:
Quelle version de SQLCE utilisez-vous? Pouvez-vous dire si les valeurs de ce paramètre sont transmis à partir de votre code à la DB? J'ai écrémé à travers ce tutoriel MSDN et a été en mesure d'obtenir les résultats que vous cherchez, au moins à partir de Visual Studio Concepteur de Requêtes. (la seule différence est que je suis avec VS 2008 et SQL Server Compact 3.5). Voir la section intitulée "Créer une nouvelle requête"; j'ai fait la maquette, une table avec des données et cette requête a fonctionné comme vous le souhaitez.
Comme je l'ai dit, je n'ai pas écrit le code pour appeler la requête, mais il a travaillé à partir du concepteur. En d'autres termes, "il fonctionne sur ma machine".
À l'aide de:
...signifie que la chaîne est construite avant d'être cloué sur la dynamique SQL. Ceci est fait de sorte que vous n'avez pas à spécifier le paramètre dans la liste de paramètres pour sp_executesql/EXEC, tout ce:
...ne. Merci de poster plus de la requête.
Merci de poster votre exemple complet (y compris le outer code client où l'assemblage de votre appel). À la fois votre deuxième et troisième options devrait fonctionner si vous passez le paramètre correctement. Êtes-vous à l'appel de cette dans une procédure stockée ou en ligne, SQL paramétrée?
Je n'assume aucune SPs depuis que je viens de voir que vous êtes en utilisant CE...
Je pense que vous devez ajouter de la longueur de votre
.Ajouter
appel puisque c'est unnvarchar
.Votre réponse est:
et paramètre: