LINQ to SQL: ExecuteQuery ne fonctionne pas lorsque vous effectuez une requête paramétrées

StackOverflow https://stackoverflow.com/questions/2918530

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top