LINQ to SQL:ExecuteQuery在执行参数化查询时不起作用
问题描述:
ExecuteQuery中存在一个奇怪的问题,因为它在执行参数化查询时不起作用。LINQ to SQL: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 to SQL会自动知道用引号格式化它。
作为每MSDN:
的参数在查询文本通过使用由Console.WriteLine()和的String.Format()中使用的相同的卷曲数表示。实际上,String.Format()实际上是在您提供的查询字符串上调用的,用生成的参数名称(例如@ p0,@ p1 ...,@ p(n))替换花括号参数。
因此,如果您留下的引号内容与[Username] = '@p0'
匹配,但您可以运行分析器并捕获确切的SQL来验证。
唉,发现问题了。这是围绕{0}的单引号。但是,我仍然想知道为什么会导致问题。 – ajbeaven 2010-05-27 04:46:47
使用单引号会导致问题,因为如果需要,Linq to SQL正在确定参数的类型并将它们放入。因此不必担心是否添加它们。 – 2010-05-27 04:49:30