Pregunta

Tengo un problema extraño con ExecuteQuery en que no está funcionando cuando se realiza una consulta parametrizada.

Las siguientes declaraciones de registro de 1:

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

Sin embargo, la versión con parámetros no devuelve ningún resultado:

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

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Trate:

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

Aviso sin comillas en el parámetro. LINQ a SQL sabrá automáticamente a formato con las comillas.

Según MSDN :

Los parámetros se expresan en el texto de consulta utilizando la misma notación rizado utilizado por Console.WriteLine () y String.Format (). De hecho, String.Format () se llama en realidad en la cadena de consulta que usted proporciona, sustituyendo los parámetros rizado arriostrados con nombres de parámetros generados como @ p0, p1 @ ..., @p (n).

Así que basado en que si la izquierda en las cotizaciones que habría sido coincidente en [Username] = '@p0' pero se puede ejecutar y capturar el SQL exacta para verificar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top