Domanda

Ho un problema strano con ExecuteQuery nel senso che non funziona quando si esegue una query con parametri.

I seguenti rendimenti 1 registro:

db.ExecuteQuery<Member>(@"SELECT * 
                          FROM Member
                          INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
                          WHERE [aspnet_Users].[UserName] = 'Marina2'");

Tuttavia, la versione con parametri non restituisce alcun risultato:

db.ExecuteQuery<Member>(@"SELECT * 
                          FROM Member
                          INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
                          WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Prova:

db.ExecuteQuery<Member>(@"SELECT *  
    FROM Member 
    INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId 
    WHERE [aspnet_Users].[UserName] = {0}", "Marina2"); 

Avviso senza virgolette sulla param. LINQ to SQL verrà automaticamente sapere per formattarla con le virgolette.

Come per MSDN :

  

I parametri sono espresse nel testo query utilizzando la stessa notazione usata da riccio Console.WriteLine () e String.Format (). In realtà, String.Format () è in realtà chiamato sulla stringa di query che fornisci, sostituendo i parametri ricci rinforzati con i nomi dei parametri generati, ad esempio @ p0, p1 @ ..., @p (n).

Quindi, sulla base che se hai lasciato le quotazioni in saresti stato corrispondente sul [Username] = '@p0' ma si potrebbe correre profiler e catturare l'esatto SQL per verificare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top