Entity framework SqlQuery exécuter la requête avec la répétition des paramètre
Je vais avoir des problèmes en essayant d'exécuter une requête SQL avec la répétition des paramètres à l'aide de entity framework.
La requête est une recherche par mot-clé, qui ressemble à des tables différentes, donc en utilisant le même paramètre de nombreuses fois. Je suis en utilisant COMME consolidés (oui, je sais que je devrais être à l'aide de FULLTEXTSEARCH, mais je n'ai pas le temps pour ça en ce moment).
J'ai essayé de l'ensemble de la syntaxe est expliquée ici: Comment utiliser DbContext.La base de données.SqlQuery<TElement>(sql, params) avec une procédure stockée? EF Premier Code CTP5 et aucun d'entre eux de faire le travail de requête (j'ai zéro lignes retournées).
J'ai même essayé de construire un tableau de chaîne dans l'exécution, avec une longueur égale au nombre de fois que le paramètre de répétitions dans la requête, puis le remplissage de tous les éléments du tableau avec le mot-clé terme de recherche. Ensuite, j'ai passé que comme le object[] paramètres. Ne fonctionne pas non plus.
La seule chose qui fonctionne c'est de faire une recherche&remplacer ce qui est évidemment une mauvaise idée car le paramètre provient d'une saisie de texte, et je vais être vulnérables aux attaques par injection SQL.
Le code de travail (vulnérables aux attaques par injection SQL, mais la requête renvoie des lignes):
//not the real query, but just for you to have an idea
string query =
"SELECT Field1, " +
" Field2 " +
"FROM Table1 " +
"WHERE UPPER(Field1) LIKE '%{0}%' " +
"OR UPPER(Field2) LIKE '%{0}%'";
//keywordSearchTerms is NOT sanitized
query = query.Replace("{0}", keywordSearchTerms.ToUpper());
List<ProjectViewModel> list = null;
using (var context = new MyContext())
{
list = context.Database.SqlQuery<ProjectViewModel>(query, new object[] { }).ToList();
}
return list;
Je suis en utilisant ASP.NET MVC 4, .NET 4.5, SQL Server 2008 et Entity Framework 5.
Des idées sur comment faire de la SQLQuery<> la méthode de remplir toutes les occurrences du paramètre dans la chaîne de requête? Je vous remercie beaucoup pour votre temps.
OriginalL'auteur Juan Paredes | 2013-04-30
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
OriginalL'auteur serefbilge
Vous pouvez utiliser les paramètres de votre requête. Quelque chose comme ceci
OriginalL'auteur jure
que diriez essayer cette
Avez-vous essayé d'utiliser la requête dans SQL Management Studio?
quel est votre keywordSearchTerms? est-il un seul mot? ou plusieurs mots?
La requête fonctionne. Lorsque j'utilise la recherche&remplacer dans la chaîne de requête, la méthode donne les résultats de certaines recherches, j'ai préparé pour les tests. Il travaille également sur SQL Management studio. Il n'est donc pas la requête qui est faux. Ce que je pense que le problème est que le SqlQuery<T>(requête, params) méthode ne vise pas à remplacer les espaces réservés de paramètre dans la chaîne de requête avec la aseptisé de la valeur. Enfin je ne pense pas pertinentes de la valeur de la keywordSearchTerms. L'opérateur LIKE fonctionne avec des chaînes, indépendamment d'une ou de plusieurs mots, autant que je sache. Merci pour votre temps.
Puisque vous êtes à l'aide de la chaîne.Format pour faire le paramètre de remplacement au lieu de SqlParameter, n'est-ce pas cette méthode sensibles à l'injection SQL?
OriginalL'auteur Cloudsan Chen