LINQ to SQL:ExecuteQuery在执行参数化查询时不起作用

时间:2010-05-27 04:44:37

标签: linq-to-sql parameterized-query

我对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 个答案:

答案 0 :(得分:2)

尝试:

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来验证。