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

我究竟做错了什么?

有帮助吗?

解决方案

尝试:

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