linq to sql:执行参数化查询时执行不起作用
-
04-10-2019 - |
题
我对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以验证。
不隶属于 StackOverflow