2

我对 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");

我究竟做错了什么?

4

1 回答 1

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 以进行验证。

于 2010-05-27T04:47:21.623 回答