LINQ to SQL: ExecuteQuery funktioniert nicht, wenn eine parametrisierte Abfrage durchführen

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

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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top