我对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");
我做错了什么?
答案 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来验证。