LINQ to SQL:执行参数化查询时 ExecuteQuery 不起作用

发布于 2024-09-03 07:21:36 字数 654 浏览 16 评论 0原文

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

我做错了什么?

I have a weird problem with ExecuteQuery in that it isn't working when performing a parameterized query.

The following returns 1 record:

db.ExecuteQuery<Member>(@"SELECT * 
                          FROM Member
                          INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
                          WHERE [aspnet_Users].[UserName] = 'Marina2'");

However, the parameterized version returns no results:

db.ExecuteQuery<Member>(@"SELECT * 
                          FROM Member
                          INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
                          WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

懒猫 2024-09-10 07:21:36

尝试:

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

Try:

db.ExecuteQuery<Member>(@"SELECT *  
    FROM Member 
    INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId 
    WHERE [aspnet_Users].[UserName] = {0}", "Marina2"); 

Notice no quotes on the param. Linq to SQL will automatically know to format it with the quotes.

As per MSDN:

The parameters are expressed in the query text by using the same curly notation used by Console.WriteLine() and String.Format(). In fact, String.Format() is actually called on the query string you provide, substituting the curly braced parameters with generated parameter names such as @p0, @p1 …, @p(n).

So based on that if you left the quotes in you would have been matching on [Username] = '@p0' but you could run profiler and capture the exact SQL to verify.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文