LINQ to SQL: ExecuteQuery ne fonctionne pas lorsque vous effectuez une requête paramétrées
-
04-10-2019 - |
Question
J'ai un problème bizarre avec ExecuteQuery en ce qu'elle ne fonctionne pas lorsque vous effectuez une requête paramétrées.
Les rendements suivants 1 enregistrement:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
Cependant, la version paramétrés Aucun résultat:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
Qu'est-ce que je fais mal?
La solution
Essayez:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
Avis sans guillemets sur le COMMUT. LINQ to SQL saura automatiquement le formater avec les guillemets.
par MSDN :
Les paramètres sont exprimés dans le texte de la requête en utilisant la même notation bouclés utilisée par Console.WriteLine () et String.Format (). En fait, String.Format () est en fait appelé la chaîne de requête que vous fournissez, en remplaçant les paramètres contreventement bouclés avec des noms de paramètres générés tels que @ p0, @ p1 ..., @p (n).
sur cette base si vous avez laissé les citations en vous auriez été mise en correspondance sur [Username] = '@p0'
mais vous pouvez exécuter profileur et capturer SQL exacte à vérifier.