LINQ to SQL: ExecuteQuery не работает при выполнении параметризованного запроса - PullRequest
2 голосов
/ 27 мая 2010

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

Следующая запись возвращает 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");

Что я делаю не так?

1 Ответ

2 голосов
/ 27 мая 2010

Попробуйте:

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

Обратите внимание на отсутствие кавычек в параметре. Linq to SQL автоматически распознает форматирование с кавычками.

Согласно MSDN :

Параметры выражаются в тексте запроса с использованием тех же фигурных обозначений, которые используются Console.WriteLine () и String.Format (). Фактически, String.Format () фактически вызывается в строке запроса, которую вы предоставляете, заменяя параметры в фигурных скобках сгенерированными именами параметров, такими как @ p0, @ p1…, @p (n).

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

...