LINQ to SQL: ExecuteQuery funktioniert nicht, wenn eine parametrisierte Abfrage durchführen
-
04-10-2019 - |
Frage
Ich habe ein seltsames Problem mit ExecuteQuery, dass es nicht funktioniert, wenn eine parametrisierte Abfrage durchgeführt wird.
Der folgende Code gibt 1 Datensatz:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
Allerdings ist die parametrisierte Version liefert keine Ergebnisse:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
Was mache ich falsch?
Lösung
Versuchen Sie:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
Hinweis ohne Anführungszeichen auf der param. Linq to SQL automatisch weiß, dass es zu formatieren mit den Anführungszeichen.
Wie pro MSDN :
Die Parameter werden im Abfragetext ausgedrückt durch die gleiche geschweiften Notation von Console.WriteLine verwendet () verwendet und String.Format (). In der Tat, String.Format () aufgerufen wird tatsächlich auf die Query-String Sie liefern, die geschweiften verspannt Parameter mit generierten Parameternamen ersetzt wie @ p0, @ p1 ..., @p (n).
auf, dass also basiert, wenn Sie die Anführungszeichen links in Ihnen Matching auf [Username] = '@p0'
gewesen wäre, aber man konnte Profiler und erfassen die genaue SQL ausführen zu überprüfen.