Linq к sql: executewhery не работает при выполнении параметризованного запроса

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

  •  04-10-2019
  •  | 
  •  

Вопрос

У меня есть странная проблема с executewhery в том, что она не работает при выполнении параметризованного запроса.

Следующие возвраты 1 запись:

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

Тем не менее, параметризованная версия возвращает никаких результатов:

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

Что я делаю неправильно?

Это было полезно?

Решение

Пытаться:

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

Не заметите никаких цитат на параметрах. LINQ для SQL автоматически узнает, чтобы отформатировать его с кавычками.

Согласно MSDN:

Параметры выражены в тексте запроса с использованием одной и той же курсовой записи, используемой Console.Writeline () и String.format (). На самом деле, string.format () фактически вызывается в строке запроса, которую вы предоставляете, подставляя вьющиеся призванные параметры с генерируемыми именами параметров, таких как @ P0, @ p1 ..., @p (n).

На основании того, что если вы покинули цитаты, вы должны были бы соответствовать [Username] = '@p0' Но вы можете запустить Profiler и захватить точный SQL для проверки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top